排序算法-希尔排序

介绍

希尔排序也称缩小增量排序,属于插入排序中的一种排序算法,是在插入排序的基础上进行的改进,采用分组策略进行排序。

相关特点

  1. 时间复杂度:最好:O(n)、最坏:O(n2)、平均:O(n1.3)
  2. 辅助空间复杂度:O(1)
  3. 稳定性:不稳定

排序原理

希尔排序通过设定一个初始增量,将数组元素分组进行插入排序。随着增量的逐步减小,每组包含的元素逐渐增多,当增量减至1时,整个数组被分成一组,排序完成。

优点

  1. 效率较高‌:在初始阶段通过分组排序快速减少数据量,适合处理大规模数据。
  2. 适用于部分有序的数据‌:在数据部分有序的情况下,希尔排序的效率远高于传统的插入排序。

缺点

  1. 不稳定‌:由于多次插入排序,相同元素的相对顺序可能会被打乱,因此希尔排序是不稳定的。
  2. 增量序列的选择‌:不同的增量序列选择可能会影响算法的性能和结果,进而影响排序的效率。

应用场景

希尔排序适用于大规模数据的快速排序,特别是在数据部分有序的情况下表现优异。它常用于需要高效排序的场景,如数据库管理和大数据处理。

排序步骤

针对序列长度为偶数值的序列

以序列Array=【7 3 5 9 2 0 8 6】为例。

  1. 定义一个增量,增量的值为序列长度的一半,由此可知,序列Array的增量为8/2=4。

  2. 根据增量4进行分组,得到4组,分别是(7,2)、(3,0)、(5,8)、(9,6)

  3. 同组之间进行比较,若前面的值小于后面的值,则不发生变动,否则互换位置。最终得到如下序列【2,0,5,6,7,3,8,9】

  4. 重新设置分组,增量值为前一次分组增量值的一半,前一次分组增量值为4,则新的增量值为4/2=2。

  5. 根据步骤4得到的增量2对序列【2,0,5,6,7,3,8,9】进行分组,得到{2,5,7,8}同组,{0,6,3,9}同组。

  6. 针对步骤5中的两个同组数值进行从小到大排序,同组序列的排序结果就是{2,5,7,8},{0,3,6,9},合并起来就是【2,0,5,3,7,6,8,9】

  7. 继续设置分组,增量值为前一次分组增量值的一半,前一次分组增量值为2,则新的增量值为2/2=1(在排序过程中要一直进行分组,直到增量为1为止)。

  8. 根据步骤7得到的增量1对序列【2,0,5,3,7,6,8,9】进行分组,把8个数字看成一组,按插入排序进行排序,得到序列【0,2,3,5,6,7,8,9】

针对序列长度为奇数值的序列

以序列Array=【36 27 20 60 55 7 28 36 67 44 16】为例。

  1. 定义一个增量,增量的值为序列长度的一半,序列长度为奇数时增量的值向下取整即可,由此可知,序列Array的增量为11/2=5。

  2. 根据增量5进行分组,得到5组,分别是(36,7,16)、(27,28)、(20,36)、(60,67)、(55,44)

  3. 同组之间进行比较,若前面的值小于后面的值,则不发生变动,否则互换位置。最终得到如下序列【7,27,20,60,44,16,28,36,67,55,36】

  4. 重新设置分组,增量值为前一次分组增量值的一半,前一次分组增量值为5,则新的增量值为5/2=2。

  5. 根据步骤4得到的增量2对序列【7,27,20,60,44,16,28,36,67,55,36】进行分组,得到{7,20,44,28,67,36}同组,{27,60,16,36,55}同组。

  6. 针对步骤5中的两个同组数值进行从小到大排序,同组序列的排序结果就是{7,20,28,36,44,67},{16,27,36,55,60},合并起来就是【7,16,20,27,28,36,36,55,44,60,67】

  7. 继续设置分组,增量值为前一次分组增量值的一半,前一次分组增量值为2,则新的增量值为2/2=1(在排序过程中要一直进行分组,直到增量为1为止)。

  8. 根据步骤7得到的增量1对序列【7,16,20,27,28,36,36,55,44,60,67】进行分组,把11个数字看成一组,按插入排序进行排序,得到序列【7,16,20,27,28,36,36,44,55,60,67】

posted @   相遇就是有缘  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
  1. 1 我记得 赵雷
  2. 2 北京东路的日子 汪源
  3. 3 把回忆拼好给你 王贰浪
北京东路的日子 - 汪源
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

点击右上角即可分享
微信分享提示