iOS算法总结-归并排序
来源:互联网 发布:指纹比对算法 编辑:程序博客网 时间:2024/06/02 03:16
归并排序算法:
归并排序(Merging Sort) 就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或者1的有序子序列;再两两归并,......,如此反复,直到得到一个长度为n的有序序列为止,这种排序方法称为归并排序。
示例图如下:
通俗点解释:把数组元素拆分开,两两循环排序,例如[4,3,2,1]。先是4和3排序 -> [3,4], 2和1排序 -> [1,2]。最后[3,4]和[1,2]排序 -> [1,2,3,4]。
代码如下:
- (void)megerSortAscendingOrderSort:(NSMutableArray *)ascendingArr{ //tempArray数组里存放ascendingArr个数组,每个数组包含一个元素 NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:1]; for (NSNumber *num in ascendingArr) { NSMutableArray *subArray = [NSMutableArray array]; [subArray addObject:num]; [tempArray addObject:subArray]; } //开始合并为一个数组 while (tempArray.count != 1) { NSInteger i = 0; while (i < tempArray.count - 1) { tempArray[i] = [self mergeArrayFirstList:tempArray[i] secondList:tempArray[i + 1]]; [tempArray removeObjectAtIndex:i + 1]; i++; } } NSLog(@"归并升序排序结果:%@", tempArray[0]);}- (NSArray *)mergeArrayFirstList:(NSArray *)array1 secondList:(NSArray *)array2 { NSMutableArray *resultArray = [NSMutableArray array]; NSInteger firstIndex = 0, secondIndex = 0; while (firstIndex < array1.count && secondIndex < array2.count) { if ([array1[firstIndex] floatValue] < [array2[secondIndex] floatValue]) { [resultArray addObject:array1[firstIndex]]; firstIndex++; } else { [resultArray addObject:array2[secondIndex]]; secondIndex++; } } while (firstIndex < array1.count) { [resultArray addObject:array1[firstIndex]]; firstIndex++; } while (secondIndex < array2.count) { [resultArray addObject:array2[secondIndex]]; secondIndex++; } return resultArray.copy;}
复杂度分析:
我们来分析一下时间复杂度,一趟归并需要将1~n个相邻的元素进行两两归并,需要的时间为O(n),整个归并排序需要进行log₂n次,因此总的时间复杂度为O(nlogn)。 这是该算法中最好、最坏和平均的时间性能。
由于在归并过程中需要原始序列同样数量的存储空间n和递归时深度为logn的栈空间,因此空间复杂度为O(n+logn)。
因为是两两比较,不存在跳跃,因此是一种稳定的排序算法。虽然占用内存比较多,但却是一种效率高的算法。
作者:方圆一里
链接:http://www.jianshu.com/p/04d9480a0633
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
1 0
- iOS算法总结-归并排序
- 归并排序算法 iOS
- 【算法总结】归并排序总结
- 排序算法总结--归并排序算法
- 排序算法总结——归并排序
- 排序算法总结(六)归并排序
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 排序算法总结(7)--归并排序
- 归并排序及排序算法的总结
- 排序算法总结之归并排序
- 排序算法总结之快速排序、归并排序、shell排序
- 排序算法总结(二)归并法
- 基础算法总结之归并排序
- 【分治策略】归并排序算法总结
- iOS 排序算法总结
- iOS 排序算法总结
- 算法导论-插入排序,归并排序,快速排序总结
- VS2015update2环境下DirectX11编程说明
- vue sass 安装
- java根据图片的url地址下载图片到本地
- 成员变量和类变量的区别
- 前端训练练习网
- iOS算法总结-归并排序
- 带你逐步深入了解SSM框架——淘淘商城项目之项目介绍及搭建maven工程
- IMOLD.V13.SP3.forSolidWorks2011-2016
- java动态代理和spring动态代理对比
- windows下使用nexus搭建maven私服的流程和说明
- MySQL常用语句
- 查询结果集数据插入另一表
- idea 安装配置tomcat 及版本问题,以及tomcat context initialized event to listener instance of class org.springfr记
- Java