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

  • 相关阅读:
    python连接mysql循环插入千万条数据脚本
    jmeter多用户登录并发测试
    appium元素定位总结
    appium元素定位工具
    修复mysql的表
    mysql 数据去重
    MySQL表结构(含数据类型、字段备注注释)导出成Excel
    linux top 的用法
    linux 查看 cpu
    linux 怎么在后台添加运行脚本,即使关机也可以用
  • 原文地址:https://www.cnblogs.com/menchao/p/5203965.html
Copyright © 2011-2022 走看看