希尔排序-ShellSort
来源:互联网 发布:lol域名 发展 编辑:程序博客网 时间:2024/06/06 02:38
希尔排序,其实就是缩小增量的插入排序。
希尔排序算法分析:
将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序……最后选择增量为1,即使用直接插入排序,使最终数组成为有序。
增量的选择:
在每趟的排序过程都有一个增量,至少满足一个规则 增量关系 gap[1] > gap[2] > gap[3] >..> gap[t] = 1 (t趟排序);根据增量序列的选取其时间复杂度也会有变化,这个不少论文进行了研究,在此处就不再深究;本文采用首选增量为n/2,以此递推,每次增量为原先的1/2,直到增量为1;
void ShellSort(vector<int> &num){ int length=num.size(); int tmp,j; //gap从length/2开始,每次减半 for(int gap=length/2;gap>=1;gap/=2){ for(int i=gap;i<length;i++){ tmp=num[i]; //gap间隔插入排序 for(j=i-gap;j>=0 && num[j]>tmp;j-=gap){ num[j+gap]=num[j]; } num[j+gap]=tmp; } } }
写个类测试一下:
class TestShellSort { public: void main(){ vector<int> nums{3,5,2,8,4,7,8,9,10,12,11}; Solution s; s.ShellSort(nums); } };
OK!!!
0 0
- 希尔排序-ShellSort
- 排序- 希尔排序 ShellSort
- 希尔排序(shellsort)
- 希尔排序算法 shellsort
- 希尔排序(ShellSort)
- 希尔排序shellsort
- 希尔排序 (ShellSort)
- uva10152-shellsort && 希尔排序
- 希尔排序(Shellsort)
- 希尔排序(ShellSort)
- 【ShellSort】希尔排序
- 希尔排序---shellsort
- 希尔排序(ShellSort)
- 希尔排序(shellsort)
- 希尔排序 ShellSort
- 希尔排序(ShellSort)
- 希尔排序(ShellSort)
- 希尔排序ShellSort
- k-d tree算法
- [Exercises]24 Graphical User Interfaces
- canvas实现简易时钟效果
- iOS 判断是否安装SIM卡
- 旋转数组最小值(算法)
- 希尔排序-ShellSort
- C++智能指针
- C++ 单例模式
- Sizzle选择器引擎介绍
- postgreSQL插入语句返回主键
- OCX 打包 CAB 与 JS 调用详细教程
- Excel统计某字符或关键字出现的次数
- setLatestEventInfo(),Builder.getNotification()过时,Android提供的解决方案
- 异常安全的C++类