码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法——插入排序

时间:2020-07-21 01:03:43      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:lan   mic   逻辑   图片   pre   http   初始   数字   image   

  • 排序逻辑

    每次遍历,保证前面的队列是有序的

    • 初始队列

      技术图片

    • 第一轮

      技术图片

    • 第二轮

      技术图片

    • 第三轮

      技术图片

    • 第四轮

      技术图片

  • 代码示例

    public static void insertSort(int[] arr){
      //从第二个数开始遍历所有的数字,每一次遍历保证前面的序列是有序的
      for(int i=1;i<arr.length;i++){
          //每次遍历保证前面的序列有序
          for(j=i-1;j>=0;j--){
              if(arr[j]>arr[j+1]){
                  int temp = arr[j];
                  arr[j] = arr[j+d];
                  arr[j+d] = temp;
              }
          }
      }
    }
    

    选择排序每次都需要遍历前面所有的队列,但因为前面序列本身就是有序的,所以当前数大于前面一个数时,则不需要向前遍历,故可以小小优化一下

    public static void insertSort(int[] arr){
        //从第二个数开始遍历所有的数字,每一次遍历保证前面的序列是有序的
        for(int i=1;i<arr.length;i++){
            //如果当前数字比前一个小则遍历前面的队列,否则加上该数队列仍然是有序的
            if(arr[i]<arr[i-1]){
                //将当前值存到 temp 中
                int temp = arr[i];
                int j;
                //从前一个数字向前遍历,每一个比 temp 大的数赋给它的后一位
                for(j=i-1;j>=0&&temp<arr[j];j--){
                    //每一个比 temp 大的数,将当前数赋给后一个数
                    arr[j+1] = arr[j];
                }
                //直到不比 temp 大的数,将 temp 赋给该位
                arr[j+1] = temp;
            }
        }
    }
    
  • 事件复杂度

    O(n2)

排序算法——插入排序

标签:lan   mic   逻辑   图片   pre   http   初始   数字   image   

原文地址:https://www.cnblogs.com/angle-yan/p/13347888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!