软设之希尔排序

假设有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)

相关推荐
小O的算法实验室6 分钟前
2024年ASOC SCI2区TOP,有效离散人工蜂群算法+变压器制造矩形切割问题,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
GEO_JYB34 分钟前
从 MMLU 到 HumanEval:为什么评估大型语言模型(LLM)的基准至关重要?
人工智能·算法
heeheeai34 分钟前
辗转相除法(欧几里得算法)的证明
算法·最大公约数
DKPT36 分钟前
JVM新生代和老生代比例如何设置?
java·开发语言·jvm·笔记·学习
ST.J1 小时前
设计模式笔记
笔记·设计模式
君万1 小时前
【LeetCode每日一题】94. 二叉树的中序遍历 104. 二叉树的最大深度
算法·leetcode·golang
Imxyk2 小时前
力扣:2322. 从树中删除边的最小分数
数据结构·算法·leetcode
农场主John2 小时前
(双指针)LeetCode 209 长度最小的子数组
数据结构·算法·leetcode
程序员Xu2 小时前
【LeetCode热题100道笔记】前 K 个高频元素
笔记·算法·leetcode
Asmalin2 小时前
【代码随想录day 23】 力扣 93.复原IP地址
算法·leetcode