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

排序算法-直接插入排序

时间:2016-02-20 21:27:50      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增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).

排序算法-直接插入排序

标签:

原文地址:http://www.cnblogs.com/menchao/p/5203965.html

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