插入排序学习笔记

插入排序就是把一个未排序的数组看成两部分,一部分认为是有序的,另一部分认为是无序的,最开始的时候有序数组只有开头的第一个元素,剩下的都是无序的,要做的就是每次从无序数组中拿出一个去找到其在有序数组中应该待的位置,这样一共需要length-1次才能完成,每一次循环拿出来的那一个元素要么从0索引开始比较,比较到一个大于他的元素为止,但是索引不能超过i-1,要么就从i-1位置开始比较,比较到一个小于他的元素位置,索引最多>=0,对于前一种情况,index所在的位置就是被拿出的那个元素该待的位置,后面的都要后移,对于后一种来说,index所在位置的下一个位置才是他该待的位置;在后移的时候既可以先找到index,再进行后移,也可以找到一个大于arr[i]的就将其后移,不过这种情况只能是从后向前找;
平均时间复杂度是(n²),在最好情况下也就是已经按照规定顺序排列好的话,因为arr[i]>arr[i-1]所以就不会进入遍历,因此时间复杂度为(n),最坏情况下复杂度就是(n²);
代码如下:

 //从后往前,只要temp小就将index位置元素后移,注意此时arr[i]处的元素变了,因此使用temp
    static void insertSort3(int[] arr) {
        int length = arr.length;
        for (int i = 1; i < length; i++) {
            int index = i - 1;
            int temp = arr[i];
            while (index >= 0 && temp < arr[index]) {
                arr[index + 1] = arr[index];
                index--;
            }
            arr[index + 1] = temp;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值