zoukankan      html  css  js  c++  java
  • 插入排序

    插入排序

     

     1  public int[] insertSort(int[] arr) {
     2         /**
     3          * 插入排序:
     4          *      算法思想:从第二个元素开始到最后一个元素,取出元素,依次与它前面的元素比较(从后往前),如果大于等于,插入,反之则将该位置的元素向后移动,继续与前一个比较直至插入
     5          *      时间复杂度:O(n^2)
     6          *      空间复杂度:O(1)
     7          *      稳定性:稳定
     8          */
     9         for (int i = 1; i < arr.length; i++) {     //从第二个元素开始,n-1次插入
    10             int temp = arr[i];       //每趟将arr[i]插入到前面的排序子序列中
    11             int j;//j初始化为当前元素的前一个
    12             for (j = i -1; j >= 0 && temp < arr[j]; j--) {
    13                 arr[j+1] = arr[j ];//***###  //在到达第一个元素之前且当前元素(i)小于依次比较的元素,将前面较大的元素向后移动。
    14             }
    15             arr[j + 1] = temp;      //temp值到达插入位置
    16         }
    17         return arr;
    18     }

     

    例子:

    5 4 2 7 12 0 9 6

    从第二个元素开始,与前面的元素比较,(按从小到大排序),如果大于,则把当前元素保存起来,将前面的元素依次向后移动,然后插入因为右移动所产生的那个空缺

     第1次:

    4 5 2 7 12 0 9 6

     第2次:

      2 4 5 7 12 0 9 6

    这样迭代下去就可以了

    注意:每次移动的前提是前面的数组元素都是已经按顺序排列好了 

  • 相关阅读:
    《梦断代码》读后感(二)
    《梦断代码》读后感(一)
    最大子数组和(环状数组)
    求最大字数组的和的1000个元素的新要求
    面试题fugui02
    Linux基本操作
    面试题fugui
    水星的水
    python魔术方法
    tornado websocket聊天室
  • 原文地址:https://www.cnblogs.com/XT-xutao/p/9995289.html
Copyright © 2011-2022 走看看