算法之希尔排序
2016-05-22 00:15
204 查看
基本概念
希尔排序是一种基于插入排序的快速排序算法。相较于传统的插入排序,他在处理大规模乱序数组时具有较大优势。试想一个无序数组,其最小值在数组末端,那么如果使用传统的插入排序,只能通过交换相邻的元素一个一个地把最小值移动到第一个,显然效率不高。希尔排序将整个数组分成若干个序列(序列的长度叫“增量”),对每一个序列进行插入排序,然后依次缩减增量再进行插入排序。随着增量的减小以及数组的局部有序化,数组逐步完成排序。因为随着排序的进行数组有序化程度增高,效率较选择和插入排序有一定提高。
![](https://img-blog.csdn.net/20160522001714515)
代码实现
“`
希尔排序是一种基于插入排序的快速排序算法。相较于传统的插入排序,他在处理大规模乱序数组时具有较大优势。试想一个无序数组,其最小值在数组末端,那么如果使用传统的插入排序,只能通过交换相邻的元素一个一个地把最小值移动到第一个,显然效率不高。希尔排序将整个数组分成若干个序列(序列的长度叫“增量”),对每一个序列进行插入排序,然后依次缩减增量再进行插入排序。随着增量的减小以及数组的局部有序化,数组逐步完成排序。因为随着排序的进行数组有序化程度增高,效率较选择和插入排序有一定提高。
代码实现
public class ShellSort { public static <T extends Comparable> void shellSort(T[]arr) { int h = 1;//定义增量 while(h<arr.length/3){ h=h*3+1;//增量大小可以按需设定 } while(h>=1){//增量最小为1也就是传统插入排序 for(int x=h;x<arr.length;x++){//开始对每一个序列排序 for(int y=x;y>=h&&(arr[y].compareTp(arr[y-h]<0);y-=h){//把每个序列的第一个和最后一个比较大小 T temp = arr[y-1]; arr[y-1]=arr[y]; arr[y]=temp; } } h/=3;}//比较完毕增量变小,直到变为1,此时数组高程度排序完成
“`
相关文章推荐
- 插入排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例