算法-希尔排序
希尔排序实际上是插入排序的一种,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。时间复杂度无法准确的估计,希尔排序的基本逻辑记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组恰被分成一组,算法便终止。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -( NSMutableArray *)shellSort:( NSMutableArray *)arr{ NSInteger group=1; while (group>[arr count]/3) { group=3*group+1; } while (group>=1) { //将数组变成group有序 for ( NSInteger i=group; i<[arr count]; i++) { //将分组后的数据与前面的数据一一比较进行交换 for ( NSInteger j=i; j>=group&&[arr[j] integerValue]<[arr[j-group] integerValue]; j-=group) { NSInteger temp=[arr[j] integerValue]; arr[j]=[ NSNumber numberWithInteger:[arr[j-group] integerValue]]; arr[j-group]=[ NSNumber numberWithInteger:temp]; } } group=group/3; } return arr; } |
如果数组的长度是10,这里的增量是4,网上有些博客对理解是,增量的取值规则为第一次取总长度的一半,第二次取一半的一半,依次累推直到1为止,其实这样可以快速理解希尔排序,不过希尔排序的性能跟增量的选择有很大的关系,对于增量的选择不应该不应该这么简单粗暴,如果在实际实战过程中需要根据实际情况取决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | NSMutableArray *arr=[[ NSMutableArray alloc]initWithCapacity:10]; [arr addObject:@ "6" ]; [arr addObject:@ "3" ]; [arr addObject:@ "2" ]; [arr addObject:@ "8" ]; [arr addObject:@ "9" ]; [arr addObject:@ "10" ]; [arr addObject:@ "4" ]; [arr addObject:@ "5" ]; [arr addObject:@ "1" ]; MySort *sort=[[MySort alloc]init]; NSMutableArray *resultArr= [sort shellSort1:arr]; for ( NSInteger i=0; i<[resultArr count]; i++) { NSLog (@ "%@" ,[resultArr objectAtIndex:i]); } NSLog (@ "iOS技术交流群:228407086" ); NSLog (@ "原文地址:http://www.cnblogs.com/xiaofeixiang" ); |
运行结果:
作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
标签:
算法
, Objective-C
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述