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

  • 相关阅读:
    前五章的综合(查漏补缺)一个字一个字读,便于您的理解程度
    appium连接android真机【红米note8】碰到的问题及解决方案
    linux tz配置
    linux下卸载apache
    VM下的静态ip和动态ip的坑
    linux下安装mysql
    LR录制过程中会出现的问题
    linux下安装jdk和tomcat
    jmeter的环境变量
    jmeter实现mysql的增删改查
  • 原文地址:https://www.cnblogs.com/menchao/p/5203965.html
Copyright © 2011-2022 走看看