排序算法-直接插入排序

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

posted @ 2016-02-20 20:50  行藏在我  阅读(299)  评论(0编辑  收藏  举报