数据结构与算法

算法(一)之排序算法(三)——直接插入排序(InsertSort

2017-12-20  本文已影响3人  bryanrady_wang

直接插入排序也是八大排序算法之一,它还是希尔排序的前身。其排序原理是:

通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。我们假设第一个数是排好的,之后的数对排好的部分从后向前比较并逐一移动。

看了这个原理其实我还是不太懂,那我们就用实际操作流程来进行说明。

如现在有一组数据:[3, 1, 8, 6, 2, 5, 9, 4, 7]

使用插入排序对这组数据进行排序,具体流程:

      3    1    8    6    2    5    9    4    7

第一趟排序:假设3是排好的,现在我要把第二个数放进来构成一个有序序列。因为1<3所以只能插入到3的前面,所以就变成了:

      1    3    8    6    2    5    9    4    7

第二趟排序:现在1和3已经构成了有序序列,接着把下一个数继续插入到有序序列中重新变成一个新的有序序列。因为8>3所以只能插入到3的前面,所以就变成了:

      1    3    8    6    2    5    9    4    7

继续这种操作下去最后我们就可以得到一个有序序列,现在有张图更能体现插入排序。

思路很简单,现在直接上代码:

      public static void inserSort(int[] array){
            for(int i = 1;i < array.length; i++){
                 int j = i;
                 int target = array[i];  //要插入的数据
                 while( j > 0 && target < array[j-1] ){  
                      array[j] = array[j-1];    //把当前位置的数据变成上一个数据,因为插入了后前面一个数据往后面移动了一位
                      j--;    //继续向前寻找看看要插入的数是不是比前面的数小
                 }
                 array[j] = target;    //最后还要把插入的数据放到指定的位置上去
            }
      }

直接插入排序的应用场景: 适用于3到7个数据的排序。

上一篇 下一篇

猜你喜欢

热点阅读