插入排序原理与实现

插入排序步骤:

     以第1个数组元素为起点,构造有序数组,容量为1,后面无序数组元素依次加入前面有序数组,在插入中有序数组扩容,无序数组缩容。
     以从小到达排列为例:
     1.当后面无序数组第一个元素小于前面有序数组最大值,首先把需要插入的无序数组的值保存;
     2.然后把前面有序数组的最大值复制到无序数组中需要插入的值中,相当于有序数组扩容一位;
     3.之后有序数组倒数第二个值,循环和有序数组前面值比较,如果依旧小于前面的值,重复上个交换步骤;
     4.否则,跳出循环,把第一步中保存的待插入值,赋值给数组的倒数第二个数;
     5.上述是对无序数组的第一个索引值进行操作,遍历之。
     从大到小反之。

代码示例如下:

//    static int[] list = {7, 4, 2, 53, 3};
static int[] list = new int[100000];

static {
    for (int i = 0; i < list.length; i++) {
        list[i] = (int) (Math.random() * 8000000);
    }
}

public static void main(String[] args) {
        long l = System.currentTimeMillis();
        for (int i = 1; i < list.length; i++) {
            int insertValue = list[i];
            int insertIndex = i;
            while (insertIndex >= 1 && insertValue < list[insertIndex - 1]) {
                list[insertIndex] = list[insertIndex - 1];
                insertIndex--;
            }
            if (insertValue != list[insertIndex]) {
                list[insertIndex] = insertValue;
            }
//            System.out.println("第" + i + "次数据交换");
        }
        long s = System.currentTimeMillis();
        System.out.println(s - l + "ms");
//        System.out.println(Arrays.toString(list));
    }

10w数据耗时0.9s。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值