软设之希尔排序

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

相关推荐
漫随流水几秒前
leetcode算法(429.N叉树的层序遍历)
数据结构·算法·leetcode·二叉树
中屹指纹浏览器3 分钟前
指纹浏览器网络隔离技术详解:IP绑定与泄漏防护的实现方案
经验分享·笔记
漫随流水4 分钟前
leetcode算法(116.填充每个节点的下一个右侧节点指针)
数据结构·算法·leetcode·二叉树
菩提小狗10 分钟前
vulnhub靶场实战-prime|课堂笔记|网络安全|
网络·笔记·web安全
_OP_CHEN13 分钟前
【算法基础篇】(四十四)数论之欧拉定理与扩展欧拉定理深度解析:从降幂到超大规模幂运算
c++·算法·蓝桥杯·算法竞赛·欧拉定理·扩展欧拉定理·acm/icpc
lfwh16 分钟前
Java 中基于 DBSCAN 算法的车辆交汇点计算实现详解
java·开发语言·算法
数据大魔方19 分钟前
【期货量化入门】期权交易入门:从零开始学期权量化(TqSdk完整教程)
数据库·python·mysql·算法·区块链·程序员创富
期货资管源码27 分钟前
期货资管分仓软件开发/平台搭建经验分享
经验分享·算法·eclipse·区块链
@zulnger39 分钟前
python 学习笔记(文件和目录操作)
笔记·python·学习
Xの哲學41 分钟前
Linux 实时调度机制深度解析
linux·服务器·网络·算法·边缘计算