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).

  • 相关阅读:
    js常用设计模式实现(一)单例模式
    js深入(四)万脸懵圈的this指向
    js深入(三)作用域链与闭包
    js深入(二)函数的执行与上下文
    js深入(一)从原型理解原型链
    初识markdown
    git stash 用法
    见的如T、E、K、V等形式的参数常用于表示泛型形参
    SystemBarTint是两年以前的一个开源库,现在我们依然可以用它很方便的给应用加上。
    android:supportsRtl="true" 属性
  • 原文地址:https://www.cnblogs.com/menchao/p/5203965.html
Copyright © 2011-2022 走看看