简单排序之插入排序

  • 插入排序算法仍然需要O(N²)的时间,但是在一般的情况下,它要比冒牌排序快一倍,比选择排序还要快一些,尽管它比冒牌排序还有选择排序都更要麻烦一些,但是它并不复杂,他经常被用在比较排序算法的最后阶段
原理
  1. 将指针指向某个元素,假设该元素的左边都是有序的
  2. 然后将当前元素的取出来存入临时变量
  3. 然后从他左边的数从右向左依次比较
  4. 当比较到它是最左边的数或者遇到比它小的数据时结束循环
  5. 进入循环时发现小于左边得数,向右移动一位直到结束排序
  6. 比较的结果会是左边得数都比它小
 int[] arr = {12, 102, 28, 78, 45, 63, 45, 21, 4, 1, 52, 49, 88, 36, 2, 35, 61, 44, 66, 46};
        for (int i = 1; i < arr.length; i++) {//假设1的下标左边都是有序的
            int temp = arr[i];//然后将下标为一的元素取出来 存入临时变量
            int leftindex = i - 1;//然后从挨着它左边得第一个数依次向左比较
            while (leftindex >= 0 && arr[leftindex] > temp) {//当比到最左边或者遇到比temp小的数据时,结束循环
                arr[leftindex + 1] = arr[leftindex];//当发现它小于左边比较的数的时候 向右移动一位,直到结束排序
                leftindex--;//继续比较
            }
            arr[leftindex + 1] = temp;//比较出来的结果会是 它左边的都比较它小 此时数组的数据都是从小到大

        }
        for (int k :arr){
            System.out.print(k+",");
        }

输出
在这里插入图片描述

插入排序的效率

在每趟结束后,再讲temp的位置的项插入后,比outer变量下标号小的数据项是局部有序的
在第一趟比较重,最多比较一次,第二趟最多比较两次,以此类推
1+2+3+4…+n-1 = N*(N-1)/2
复制的次数大致等于比较的次数,然而一次复制与一次交换的时间耗费不同,所以相对的随机数据,这个算法比冒泡排序快一倍,比选择排序略快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值