iOS算法总结-插入排序
来源:互联网 发布:mac上安装android sdk 编辑:程序博客网 时间:2024/06/06 05:36
插入排序(Straight Insertion Sort): 基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的,记录数增1的有序表。
代码如下:
- (void)logInsertionSortingArray { NSMutableArray * arr = @[@16,@1,@2,@9,@7,@12,@5,@3,@8,@13,@10].mutableCopy; for (int i = 1; i < arr.count; i++) { int j = i; /* j是一个坑, 确定坑的位置,再把数从坑里取出来,注意顺序*/ id temp = arr[i]; /* temp 是从坑里取数*/ if (arr[i] < arr[i-1]) { /* j > 0 防止越界。写&&前面效率更高*/ temp = arr[i]; while (j > 0 && [temp intValue] < [arr[j-1] intValue]) { arr[j] = arr[j-1]; j--; } arr[j] = temp; } }}
效果图如下:
对上图解释如下:
从第二个开始,取出该位置的值为临时值temp,位置为j,此时j的位置为空,叫做坑,然后temp依次往前比较,直到找到比temp小,把temp插入该的位置,完成一次循环。
插入排序复杂度分析:
从空间上来看,它只需要一个记录的辅助空间,因此关键是看它的时间复杂度。当最好的情况,时间复杂度为O(n)。当最坏的情况,即待排序表示逆序的情况,如{6,5,4,3,2},此时需要比较(n+2)(n-1)/2次,记录的移动次数也达到(n+4)(n-1)/2次。如果排序记录是随机的,那么根据概率相同的原则,平均比较和移动次数约为n²/4次,因此插入排序法的时间复杂度为O(n²),该排序比冒泡和选择排序的性能要好一些。
作者:方圆一里
链接:http://www.jianshu.com/p/d50eac247452
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
1 0
- iOS算法总结-插入排序
- 插入排序算法(iOS)
- iOS开发算法--插入排序
- iOS 排序算法总结
- iOS 排序算法总结
- 排序算法总结——插入排序
- 排序算法总结3-插入排序
- 排序算法总结(三)插入排序
- 排序算法总结之直接插入排序
- 排序算法总结之折半插入排序
- 排序算法总结---直接插入排序
- 排序算法总结---直接插入排序
- 算法总结-选择排序,插入排序
- 排序算法总结(2)--插入排序
- 【排序算法总结】直接插入排序
- IOS算法(三)之插入排序
- 直接插入排序算法知识总结
- 学习《算法导论》第一章 插入排序 总结
- 新世纪初的长沙,乃至全国,计算机水平和行业就象垃圾
- SpringMVC的Controller
- Util工具类 Clob转成String类型
- 【估计】BZOJ1011(HNOI2008)[遥远的行星]题解
- IMPDP导入多空间表合一空间表
- iOS算法总结-插入排序
- shell 如何在文件的开头插入一行
- 修改kafka源码,编译kafka 0.8.2.2,解决bug kafka.common.InvalidTopicException
- text/html与text/plain有什么区别?
- HMACSHA1 加密算法
- 梯度提升树(GBDT)原理小结
- 使用vue2.0与bootstrap3进行简单列表分页
- 关于LPC1768的IAP随笔
- 无法解析的外部符号 _WinMain?