排序算法之希尔排序
来源:互联网 发布:聚类算法数据集 编辑:程序博客网 时间:2024/05/16 15:47
希尔排序,shell sort
思想:将待排序列分解为若干序列,再对其进行插入排序,是插入排序的高效改进。
ps:希尔表示他和该算法并没有什么关系。。。。
例:
待排数组:{8,12,3,15,9,11,22,14,13,10}
第一次排序
1) 确定步长
一般的初次取序列的一半为增量,以后每次减半,直到增量为1。
确定步长为10/2=5
2)序列分组
{8,11},{12,22},{3,14},{15,13},{9,10}
3)对分组序列进行插入排序
第一次排序结果
8,12,3,13,9,11,22,14,15,10
第二次排序
1) 确定步长
5/2=2
2) 序列分组
{8,3,9,22,15}
{12,13,11,14,10}
3)对分组序列进行插入排序
{3,8,9,15,22}
{10,11,12,13,14}
第二次排序结果为
3,10,8,11,9,12,15,13,22,14
第三次排序
1) 确定步长
2/2=1 步长为1即可确定最终的排序结果。
2)序列分组
3,10,8,11,9,12,15,13,22,14
3)对分组进行插入排序
最终结果:
3,8,9,10,11,12,13,14,15,22
代码实现
int step,i,j;for (step = n / 2; step > 0; step /= 2) //步长依次为5,2,1for (i = 0; i < step; i++){for (j = i + step; j < n; j += step) {if (a[j] < a[j - step]){int temp = a[j]; //保存较小的值到temp中int k = j - step;while (k >= 0 && a[k] > temp){a[k + step] = a[k];//元素替换,将较大的数替换到序列较后的位置k -= step;}a[k + step] = temp; //将temp赋给序列较前的位置}}} }
希尔排序效率高于普通插入排序
1.当序列基本有序时直接插入排序所需比较次数及移动次数均较少。
2.当序列初始无序时
由于步长较大,所以组内元素较少,分组较多,插入较快。
当步长逐渐缩小,分组逐渐减少,组内元素逐渐增多时,此时序列已基本实现有序,插入次数相对较少。
3.希尔排序是不稳定排序,即组内有相同元素时,未排序之前和排序之后的位置会发生变化。
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- js自调函数(function(){…})()立即执行函数写法理解
- HttpURLConnection 发送PUT请求,设置请求头参数 json请求体
- 第十一周上机实践——项目4-教师兼干部类
- Java获取时间 时间计算 转换时间工具类
- 身份证验证
- 排序算法之希尔排序
- 【LeetCode-142】Linked List Cycle II
- Java回调机制(CallBack)详解
- Win7(64bit)下安装Docker
- 判别器组合算法——Bagging与随机森林
- HDU Binary Numbers 1390(转换+统计)
- Linux系统使用Ant打包Android项目
- 【SASS-01】Sass安装与使用
- java枚举应用(二)