希尔排序的总结
来源:互联网 发布:淘宝装修辅助工具 编辑:程序博客网 时间:2024/05/16 08:21
希尔排序的基本思路:把整个排序分成若干个直接插入排序(具有相同增量),逐步缩小增量,直到增量为1,这时候一趟直接插入排序就可以了使得整个序列变成一个有序序列。
关键处代码为:
ShellSort(int a[],int n){int increment = n;do{increment = increment / 3 + 1;//缩小增量OneShellSort(a,increment,n);}while(increment > 1);}
这一部分代码很好理解,主要是做了一件事情就是减小增量然后进行一趟希尔排序,直到增量为1.
然后就是一趟Shell排序了,关键部分代码如下:
//一趟Shell排序并不是真的一次执行若干个直接插入排序,至少不是完整的一趟直接插入排序//如果理解为是一趟直接插入排序这个代码就弄不明白了,实际上是从i开始往前部分的一趟直接插入排序void OneShellSort(int a[],int increment,int n){for(int i=increment;i<n;i++){if(a[i] < a[i-increment]){int j = i -increment;int temp = a[i];do{a[j+increment] = a[j];j -= increment;}while(j>0 && a[j]>temp);a[j+d] = temp;}}}
比较一下和直接插入排序的区别:
//直接插入for(int i=1;i<n;i++){temp = a[i];j = i-1;while(j>=0 && a[j] > temp){a[j+1] = a[j];j--;}a[j+1] = temp;}
到这里看出来,之所以没理解Shell一趟排序的代码并不是像注释中的那样,其实一趟直接插入排序,就是从无序区中选取第一个插入到前面的有序区中。所以对复杂一点的算法理解不好的原因不是算法的问题,而是之间准备工作就有问题,觉得是基础代码就草草了事,结果没理解清楚,看稍难一点的代码就云里雾里了。
0 0
- 希尔排序的总结
- 希尔排序的总结2
- 排序总结----希尔排序
- 希尔排序总结
- 排序算法总结---希尔排序
- 排序算法总结---希尔排序
- 直接插入排序和希尔排序的总结
- 选择排序、插入排序、希尔排序总结
- 希尔排序算法知识总结
- iOS算法总结-希尔排序
- 改进的希尔排序
- 希尔排序的实现
- 希尔排序的实现
- java的希尔排序
- 希尔排序的实现
- 希尔排序的体会
- 希尔排序的实现
- 希尔排序的实现
- hdu5115(区间dp)
- 会计专业的渣渣学习web的历程
- SerDes interface参考设计_CDR设计(5)
- Swift 单例模式实现及类方法
- redis中SETEX和SET有什么区别?
- 希尔排序的总结
- 神经网络的泛化能力、学习速率
- HBase之Java API实操
- LRU缓存设计
- Facade Pattern
- Android中<meta-data>的使用
- 清除HtmlAgilityPack得到的InnerText中残留的script
- Leetcode: Rotate Array
- Mac 常用操作