算法初探——希尔排序
来源:互联网 发布:linux终止当前命令 编辑:程序博客网 时间:2024/06/05 05:50
希尔排序(Shell Sort)是D.L.Shell于1959年提出的一种排序算法,可以称之为第一批突破O(n^2)的排序算法。
实质为分组的插入排序
先将整个待排序的序列根据增量分割成若干个子序列,分别进行直接插入排序,然后缩减增量,继续排序。
直接盗图 O(∩_∩)O~
上面的示例中,序列的长度为10:
第一趟排序的gap(增量为5),对所有分组完成插入排序,完成后将增量减半gap=gap/2=2;
第二趟排序时上述序列将被分成三组,分别完成插入排序,再将gap减半;
第三趟排序时gap=1,也就是对序列在进行一次完整的插入排序,此时序列已经基本有序,完成插入排序的操作数是比较低的。
#include <iostream>#include <vector>#include <algorithm>using namespace std;void shellSort(vector<int> & s);void Show(int x);int main(){ using namespace std; vector<int> input = { 40, 8, 15, 18, 12 }; shellSort(input); for_each(input.begin(), input.end(), Show); cin.get(); return 0;}void shellSort(vector<int> & s){ int gap = s.size()/2; //确定初始增量 while (gap>=1) { for (int i = gap; i < s.size(); i++) //从第gap个记录向后遍历 { //基于增量的插入排序 int j = i; int temp = s[j]; while (j - gap >= 0 && s[j - gap]>temp)//每次移动改为增量 { s[j] = s[j - gap]; j-=gap; } s[j] = temp; } gap /= 2; //将增量减半 }}void Show(int x){ cout << x << " ";}
0 0
- 算法初探——希尔排序
- 算法——希尔排序
- 算法 —— 希尔排序
- 算法——希尔排序
- java算法—希尔排序
- 算法排序———希尔排序
- 排序算法——希尔排序
- 经典算法排序——希尔排序
- 排序算法4——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 排序算法系列——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 常用排序算法——希尔排序
- 数据结构排序算法——希尔排序
- 排序算法4——希尔排序
- 802.11 a/b/c/n的理解
- java动态代理
- python中的enumerate函数
- 训练过程中的Overfitting问题
- Droid48计算机使用说明
- 算法初探——希尔排序
- Linux下关机命令,shutdown -r now reboot及halt命令的区别
- 读书笔记--C语言接口与实现--atom(原子)
- ORACLE新建用户及建表
- Codeforce 630B Moore's Law
- 复杂指针的声明和解读
- FreeBSD与Linux的比较
- Java中的static
- POJ 2385 Apple Catching(DP)