排序:希尔排序
来源:互联网 发布:windows如何隐藏分区 编辑:程序博客网 时间:2024/05/22 05:00
1.概述
希尔排序是突破时间复杂度为O(n2)的第一批算法。
我们分析直接插入排序,当我们的记录是基本有序的时候,只需要少量的插入操作就可以完成整个记录的排序工作,此时直接插入很高效。还有就是记录比较少的时候,直接插入的优势也比较明显。我们把原本有大量记录数的记录进行分组分割成若干个子序列,此时每个子序列待排序的记录数就比较少了,然后对这些子序列分别进行直接插入排序,当整个序列都基本有序时,再对全体记录进行一次直接插入排序。所谓的基本排序,就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。
我们采取跳跃分割的策虐,将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入序列后得到的结果是基本有序而不是局部有序。
2.实现
void shell_sort(int A[],int N) { int i,j,increment; int tmp; for(increment=N/2;increment>0;increment/=2) {for(i=increment;i<N;i++){tmp=A[i];for(j=i;j>=increment;j-=increment){if(tmp<A[j-increment])A[j]=A[j-increment];elsebreak;}A[j]=tmp;} } }
增量的选取非常关键,time=O(n3/2)要好比直接排序的O(n2),增量序列的最后一个增量值必须等于1才行。
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 北航面试之概率论部分
- 为什么MVC不是一种设计模式
- Opencv3.0-python的那些事儿:(三)、Opencv的图像处理中的几何变换
- win7安装plsql连接oracle11g 11.2.0.4 64位数据库的简单方式
- 数据输出——print方法
- 排序:希尔排序
- 【Leetcode】H-Index
- 第十二周上机实践项目1(3):实现复数类中的运算符重载
- 我的第一篇博客(2016年6月3日晚)
- Android 适配器-mouseadapter
- 快速排序算法
- Linux零散知识点笔记
- 《图解TCP/IP》读书笔记(6)
- SecureCRT删除键、方向键乱码处理