美文网首页
直接插入排序(Straight Insertion Sort)

直接插入排序(Straight Insertion Sort)

作者: linbj | 来源:发表于2017-12-26 11:39 被阅读99次

将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
要点:设立哨兵,作为临时存储和判断数组边界之用。

假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1!因此,直接插入排序的时间复杂度是O(N2)。
时间复杂度:O(n^2).

例:



- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *arrSort = [NSMutableArray arrayWithArray:@[@(7), @(3), @(5), @(7), @(2), @(4), @(9), @(6)]];
    [self p_InsertSort:arrSort];
}
- (void)p_InsertSort:(NSMutableArray *)arrSort {
    NSInteger num = arrSort.count;
    
    for (int i = 1; i < num; i++) {
        if (arrSort[i] < arrSort[i-1]) {
            int j       = i - 1;
            
            // x 临时存储当前哨兵变量
            NSNumber *x = arrSort[i];
            
            // 将i-1 赋值给i  就会有两个一样的数字
            arrSort[i]  = arrSort[i-1];

            // 利用哨兵在已排序的数组中依次逆序遍历找到自己的位置并插入
            while (x < arrSort[j]) {
                arrSort[j+1] = arrSort[j];
                j--;
                if (j < 0) {
                    break;
                }
            }
            arrSort[j+1] = x;
        }
        
        [self p_PrintLog:i SortArray:arrSort];
    }
}


- (void)p_PrintLog:(NSInteger)index SortArray:(NSMutableArray *)arrSort{
    NSLog(@"index == %ld",(long)index);
    
    NSString *strResult;
    for (int j = 0; j< arrSort.count; j++) {
        strResult = [NSString stringWithFormat:@"%@ %ld",strResult, (long)[arrSort[j]integerValue]];
    }
    NSLog(@"%@",strResult);
}

image.png

相关文章

  • 算法(排序)

    一、内部排序 1、插入排序—直接插入排序(Straight Insertion Sort) 2、插入排序—希尔排序...

  • 几种实用的简易的排序算法

    也是面试题 一、插入排序 1.插入排序—直接插入排序(Straight Insertion Sort) 思路 遍历...

  • Ⅲ. 排序算法(Sort Algorithm)

    插入排序 1. 直接插入排序(Straight Insertion Sort) 2. 希尔排序(Shell`s S...

  • 2.1-插入排序-直接插入

    参考链接 插入排序:直接插入排序(Straight Insertion Sort) 白话经典算法系列之二 直接插入...

  • 排序算法(一)直接插入排序算法

    排序算法(一)直接插入排序算法 1.基本概念  直接插入排序(Straight-Insertion-Sort)是一...

  • 插入排序延伸 NaN

    1. 直接插入排序(Straight Insertion Sort) 1.1 基本排序 注意: 其实可以再寻找 j...

  • 排序 29

    1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...

  • 2018-01-24

    知识点:插入排序 直接插入排序法(straight insertion sort)是一种最简单的排序方法,其基本操...

  • 八大排序

    1.直接插入排序(Straight Insertion Sort) 时间复杂度O(n^2),空间复杂度O(1),稳...

  • 插入排序:直接插入排序和希尔排序

    一、原理 1.直接插入排序(Straight Insertion Sort)1.先将数组arr分为左右两部分,左侧...

网友评论

      本文标题:直接插入排序(Straight Insertion Sort)

      本文链接:https://www.haomeiwen.com/subject/tnmdgxtx.html