软设之希尔排序

假设有n个元素,先取一个小于n的整数d1作为一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组中进行直接插入排序;然后,取第二个增量d2<d1重复上诉的分组和排序,直到所取得增量dt=1,也就是所有记录放在一个同一个组进行插入排序。

比如说有数组57 68 59 52 72 28 96 33 24 19进行希尔排序。

d1=10/2=5

第1个第6个为一组,第2个第7个为一组,第3个第8个为一组,第4个第9个为一组,第5个第10个为一组,进行插入排序

排序如下

28 68 33 24 19 57 96 59 52 72

d2=5/2取奇数为3

再次分组,排序如下

24 19 33 28 59 52 72 68 57 96

d3=3/2=1

排序如下

19 24 28 33 52 59 68 72 57 96

最后对整个数组进行插入排序就可以了。这时候整个数组排列相对有序了,只要进行很少插入排序就可以完成排序了。

希尔排序是一种不稳定的排序方法,时间复杂度是O(n^1.3),空间复杂度是O(1)

相关推荐
骁的小小站2 小时前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
kkkkk0211062 小时前
软考高级-系统架构设计师案例专题三:系统开发基础
笔记·系统架构
大数据张老师4 小时前
数据结构——邻接矩阵
数据结构·算法
低音钢琴5 小时前
【人工智能系列:机器学习学习和进阶01】机器学习初学者指南:理解核心算法与应用
人工智能·算法·机器学习
新子y6 小时前
【小白笔记】区分类方法/实例方法和静态函数/命名空间函数
笔记·分类
傻童:CPU7 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法
梁辰兴7 小时前
企业培训笔记:外卖平台后端--套餐管理模块--新建套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
degen_7 小时前
第一次进入 PEICORE 流程
c语言·笔记
YJlio7 小时前
Process Monitor 学习笔记(5.24):工具栏参考与高效快捷键指南
笔记·学习·php
又见野草7 小时前
软件设计师知识点总结:数据结构与算法(超级详细)
数据结构·算法·排序算法