排序算法-直接插入排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-直接插入排序相关的知识,希望对你有一定的参考价值。

将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。

即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。

要点:设立哨兵,作为临时存储和判断数组边界之用。

直接插入排序示例:

技术分享

代码如下:

void insertSort(int a[],int  length){

        for (int i =1; i< length; i++) {

        if (a[i] < a[i-1]) {//后面的元素大于前面,进行插入

            int  j =  i;

            int  sentryX = a[i]; //哨兵

            a[i] = a[i-1];  //后移一个元素

            while (j>0 && sentryX < a[j-1]) {

                a[j] = a[j-1];//元素后移

                j--;

            }

            a[j] = sentryX;      //插入到正确位置

        }

    }

}

对应OC版本的实现:

 

- (void)insertSort:(NSMutableArray *)array{

    for (NSInteger i = 1; i< [array count]; i++) {

        NSNumber *iNumber = array[i];

        NSNumber *iPreviousNumber = array[i-1];

        if (iNumber.integerValue < iPreviousNumber.integerValue) {

            NSNumber *sentryNumber =  array[i];//哨兵

            array[i] =  array[i-1];

            NSInteger tempIndex = i;  //标记位置

            while (tempIndex > 0 && sentryNumber.integerValue <  ((NSNumber *)array[tempIndex-1]).integerValue  ) {

                array[tempIndex] = array[tempIndex-1]; //元素后移

                tempIndex--;

            }

            array[tempIndex] = sentryNumber;//哨兵插入到正确位置

        }

        }}

时间复杂度:O(n^2).

以上是关于排序算法-直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

插入排序算法初学算法之排序--直接插入排序

希尔排序的具体实现及其原理

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

常用排序算法直接插入排序

算法3 七大排序之:直接插入排序和希尔排序

Java算法 直接插入排序 -- 直接插入排序算法的非递归和递归形式实现