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

  • 相关阅读:
    Unicode与JavaScript详解 [很好的文章转]
    4种方法生成二维码 (js 控制canvas 画出 二维码)
    JQuery-Dialog(弹出窗口,遮蔽窗口)
    JQuery实现可编辑的表格
    7个提高效率的JavaScript调试工具
    jQuery中的编程范式
    10款CSS3按钮
    jQuery(function(){})与(function(){})(jQuery)的区别
    JQuery之ContextMenu(右键菜单)
    糟糕的css用法 1
  • 原文地址:https://www.cnblogs.com/menchao/p/5203965.html
Copyright © 2011-2022 走看看