经典算法之希尔排序
来源:互联网 发布:b2b平台如何运营 知乎 编辑:程序博客网 时间:2024/05/01 21:19
问题
有一数组,长度为n,把数组中的元素从小到大重新排列。
思路
希尔排序把n个元素按一定的间隔分成几组,然后按组为单位进行插入排序。
先将间隔设定为n/2,然后对每组进行插入排序,再来将间隔n/4,对每组进行插入
排序,再来将间隔设定为n/8、n/16,直到间隔为1,进行最后一次排序。
例如对10,-3,5,34,-34,5,0,9进行排序。
初始间隔为8/2 = 4。(10、-34),(-3、5),(5、0),(34,9)分别进行
插入排序。
图1、间隔为4
第二次间隔为4/2 = 2。(34,0,10,5),(-3,9,5,34)分别进行插入排
序。
图2、间隔为2
最后进行间隔为1的排序,但这次很幸运,已经完全不用执行移动操作了。
图3、间隔为1
说明
希尔排序是改良后的插入排序。希尔排序的原则是让后一次排序利用上一次排序的结
果,由于上一次的排序动作都会将固定间隔内的元素排序好,所以当间隔越来越小时,某些
元素位于正确位置的机率越高,因此最后几次的排序动作将可以大幅减低。
间隔设定为n/2并不能得到最佳的效率,有特殊的公式可求最佳的间隔,有兴趣的朋
友可在网上找到这方面的资料。
插入排序可见本人的另一篇文章经典算法之插入排序。
核心代码:
全部代码:
- 经典算法之希尔排序
- 经典排序算法之希尔排序
- 经典排序算法之希尔排序
- 经典排序算法之:希尔排序
- 经典 算法整理之希尔排序
- 经典算法--希尔排序
- 经典算法学习:排序之希尔排序(壳排序)
- 经典排序算法的汇总之希尔(shell)排序
- 经典排序算法之——希尔排序
- C/C++十大经典排序算法之希尔排序
- 经典排序之希尔排序
- 图示经典算法--希尔排序
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之三 希尔排序的实现
- ubuntu 切换到 root身份
- ORACLE 返回1-100的记录的SQL写法
- 五一,C#资源管理器
- 页面之间传递参数
- OpenGL 坐标变换 (转)
- 经典算法之希尔排序
- 按条件搜索说明
- 设计模式之依赖倒置原则
- 常用正则表达式小计
- 经典算法之二分查找法
- Kill信号列表
- 级联目录
- 经典算法之插入排序
- 经典算法之选择排序