zoukankan      html  css  js  c++  java
  • 排序算法-直接插入排序

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

  • 相关阅读:
    最近ACM刷题见到的没见过的名词
    最近刷题常常遇见的需要百度的知识点
    简单RPG场景实现(改
    简单RPG场景实现
    位图载入与位图移动
    动态菜单
    静态菜单
    双人五子棋
    HDU 2112 HDU Today
    音痴又音痴的LT
  • 原文地址:https://www.cnblogs.com/menchao/p/5203965.html
Copyright © 2011-2022 走看看