排序算法之希尔排序
来源:互联网 发布:jersey框架 get json 编辑:程序博客网 时间:2024/05/22 11:48
原理:
希尔排序算法是直接插入排序算法演变而来的一个算法,其原理是在直接插入排序的基础上增加了一个跨度。
(直接插入排序:http://blog.csdn.net/elijah_wong/article/details/56287491)
举例:
例如我们让首次跨度为5。
2,12,5,57,31,31,90,32,95,76
第一次完整的比较2和31,12和90,5和32,57和95,31和76.因为前面的数字都小于后面比较的数字,所以第一次比较后没有改变。
然后我们减小跨度为2。
2,12,5,57,31,31,90,32,95,76
第二次完整的比较2和5和31和90和95,12和57和31和32和76。于是生成了一下的数据。
2,12,5,31,31,32,90,57,95,76
然后我们减小跨度为1。
当跨度为1的时候执行的就和直接插入排序的一致了。生成排序好的数据。
2,5,12,31,31,32,57,76,90,95
代码:
void ShellSort(int a[], int nlen){int temp, j;int gap = nlen;do{gap = gap / 2;for (int i = gap; i != nlen; ++i){if (a[i - gap] > a[i]){temp = a[i];for (j = i - gap; a[j] > temp; j-=gap){a[j + gap] = a[j];}a[j + gap] = temp;}}} while (gap > 1);}
总结:
我们可以从代码的角度上看出希尔排序只是简单的从直接插入排序上面增加了一个跨度,跨度逐渐递减。当待排序的数据相对有序(小数在前或大数在前)的情况下,希尔排序的效果最好。但由于元素的个数及其顺序和间隔的设定。其时间复杂度显得不是很稳定。平均下来应该在O(nlog2n) ~ O(n^2)之间。
0 0
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- maven项目报:Project configuration is not up-to-date with pom.xml. Run Maven->Update Project
- SpringMVC中使用Interceptor拦截器的使用
- Android使用intent调取导航或者地图
- 杭电ACM第1002题——A + B Problem II
- DiscreteScrollView
- 排序算法之希尔排序
- Java静态方法:无法从静态上下文中引入非静态方法
- day02兼容性封装包
- Swift3.0 Optional String 类型 强制拆包
- ACM习题Z-26
- 初步总结C++命名规范
- 我应该找引擎开发的岗位
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- 01背包+记录路径