希尔排序算法
来源:互联网 发布:立领衬衫 知乎 编辑:程序博客网 时间:2024/05/29 12:21
希尔排序
排序,希尔排序,ShellSort
希尔排序有是又称为缩小增量排序。希尔排序通过一定的间隔(增量)将待排序序列分成个子序列(分组),再个子序列进行插入排序,通过不断缩小间隔的大小,最终实现原序列的排序。
希尔排序使用一个序列{h1,h2,…,hk}(叫做增量序列)对待排序序列进行分割。
比如含有10个键值的待排序序列{7,9,2,5,6,1,3,30,28,17}存储于数组a[]中。
第一次 取 h = 10/2 = 5;此时分组为:
对每一组的序列进行排序后(使用插入排序):
第二次 取 h /=2 = 5/2 = 2(向0取整),从新分组:
再次对每一组的序列进行排序:
再取 h /=2 = 2/2 = 1 , 分组:
可以看到h = 1 时的排序其实就是对整个序列进行插入排序,由于已经现在的序列是一个很好的预排序序列,最后的插值排序算法速度是非常快的。
下面是《数据结构与算法-C语言描述》中的实现,可以看到代码第8~14行就是直接插入排序算法。
- // 希尔排序 (缩小增量排序)
- void ShellSort(ElementType a[], int N)
- {
- int i, j, Increment;
- ElementType temp;
- for (Increment=N/2; Increment>0; Increment/=2)
- {
- for (i=Increment; i<N; i++)
- {
- temp = a[i];
- for (j=i; j>=Increment && a[j-Increment]>temp; j-=Increment)
- a[j] = a[j-Increment];
- a[j] = temp;
- }
- }
- }
0 0
- 排序算法--希尔排序
- 排序算法-希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法---希尔排序
- 排序算法---希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法:希尔排序
- 排序算法:希尔排序
- 【排序算法】希尔排序
- 排序算法---希尔排序
- 排序算法:希尔排序
- 排序算法-希尔排序
- 排序算法---希尔排序
- 排序算法-- 希尔排序
- 排序算法-希尔排序
- 排序算法:希尔排序
- SVN常用命令之update
- 文章标题
- Java 网络编程(一) 网络基础知识
- bootstrap警示框
- queue非线程安全及多线程解决办法
- 希尔排序算法
- 路径通配符含义
- 2015软件测试开发工作总结
- C语言模拟C++类
- web调试工具-Fiddler断点设置(二)
- android 6.0指纹模块学习 1
- 【学习】IXP:Internet Exchange Point
- Java 网络编程(二) 两类传输协议:TCP UDP
- JMeter 数据库压力测试(一)