
[排序算法] 4. 希尔排序(插入排序)
发布日期:2021-05-12 23:16:45
浏览次数:12
分类:精选文章
本文共 993 字,大约阅读时间需要 3 分钟。
希尔排序(Hill Sorting)
基本思想
希尔排序(Shellsort)是一种外推排序算法,基于想象一下,越有序的数组对插入的影响越小。其基本思路是逐步增加“增量”,使得数组逐渐变得有序,从而优化插入排序的效率。
选择增量:首先设置一个小于数组大小的整数d1。然后,根据d1将数组分成多个组,每个组中的元素距离d1的倍数。
内部排序:对每个组进行直接插入排序,形成一个有序的子列表。
递减增量:重复上述过程,选择下一个增量d2 < d1,直到增量变为1,此时数组已经基本排序,可以直接插入排序完成。
代码实现
以下是一个基于递增增量的希尔排序实现示例:
void ShellSort(int array[], int size) { int gap = size; while (1) { gap = (gap / 3) + 1; for (int i = gap; i < size; i++) { int k = array[i]; int j; for (j = i - gap; j >= 0; j -= gap) { if (array[j] <= k) break; array[j + gap] = array[j]; } array[j + gap] = k; } if (gap == 1) break; }}
测试数据示例
int array[] = { 3, 9, 1, 4, 2, 8, 2, 7, 5, 3, 6, 11, 9, 4, 2, 5, 0, 6 };
性能分析
时间复杂度
- 最坏情况:O(n²),需要故意构造特殊数组。
- 平均情况:O(n¹.3),在平均情况下表现较好。
- 最好情况:O(n),已排序数组时完成。
空间复杂度
- O(1),算法在内存中仅使用常数额外空间。
稳定性
- 不稳定排序,相邻元素交换可能导致问题。
通过连续递减增量分组内排序的方式,希尔排序能够有效地提高插入排序的效率,特别适用于低内存需求和插入排序率的心理上限优化问题。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月06日 15时30分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity监听日记
2019-03-07
AndroidStudio跳到错误位置
2019-03-07
木马开发的基本理论基础(五)
2019-03-07
openssl服务器证书操作
2019-03-07
expect 模拟交互 ftp 上传文件到指定目录下
2019-03-07
linux系统下双屏显示
2019-03-07
PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
2019-03-07
我用wxPython搭建GUI量化系统之最小架构的运行
2019-03-07
我用wxPython搭建GUI量化系统之Sizer布局管理与页面切换
2019-03-07
我用wxPython搭建GUI量化系统之多只股票走势对比界面
2019-03-07
我用wxPython搭建GUI量化系统之财务选股工具添加日历和排序
2019-03-07
2019年达观杯文本智能信息抽取挑战赛 四到十名队伍分享
2019-03-07
selenium+python之切换窗口
2019-03-07
重载和重写的区别:
2019-03-07
搭建Vue项目步骤
2019-03-07
linux 编译出现的错误
2019-03-07
如何保证消息队列的高可用?
2019-03-07
账号转账演示事务
2019-03-07
idea创建工程时错误提醒的是architectCatalog=internal
2019-03-07
SpringBoot找不到@EnableRety注解
2019-03-07