iOS 算法总结iOS 开发每天分享优质文章

iOS - 插入排序

2017-12-25  本文已影响65人  SkyMing一C

Demo_github

图片源于网络

插入排序

插入排序法(Inser Sort)是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。

算法思想

图-直接插入排序示例图

范例代码

/**
 插入排序

 @param array 需要排序的Array
 */
+ (void)inserSort:(NSMutableArray *)array{
    //插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的
    
    //移动数据,空出一个适当的位置,把待插入的元素放到里面去。
    for (int i = 0; i < array.count; i++) {
        
        NSNumber *temp = array[i];
        //temp 为待排元素 i为其位置 j为已排元素最后一个元素的位置(即取下一个元素,在已经排好序的元素序列中从后向前扫描)
        
        int j = i-1;

        //当j < 0 时, i 为第一个元素 该元素认为已经是排好序的 所以不进入while循环
        //  [array[j] compare:temp] == NSOrderedDescending与[array[j] intValue] > [temp intValue] 作用相同
        while (j >= 0 && [array[j] compare:temp] == NSOrderedDescending) {
            //如果已经排好序的序列中元素大于新元素,则将该元素往右移动一个位置
            [array replaceObjectAtIndex:j+1 withObject:array[j]];
            j--;
        }
        //跳出while循环时,j的元素小于或等于i的元素(待排元素)。插入新元素 i= j+1
        [array replaceObjectAtIndex:j+1 withObject:temp];
        NSLog(@"插入排序排序中:%@",array);
    }
}

算法分析

直接插入排序的算法性能

插入排序和选择排序的区别

插入排序和选择排序都有两层循环,外循环遍历整个数组,内循环稍有区别:

参考

排序三 直接插入排序

上一篇 下一篇

猜你喜欢

热点阅读