希尔排序
算法原理
- 排序原理:
- 选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组;
- 对分好组的每一组数据完成插入排序;
- 减小增长量,最小减为1,重复第二步操作。
API设计
代码
package paixu;
public class Shell {
public static void sort(Comparable[] o){
int h = 1;
while (h<(o.length/2)){
h = 2*h+1;
}
while (h>=1){
for (int i = h; i < o.length; i++) {
for (int j = i; j >= h; j-=h) {
if(greater(o[j-h],o[j])){
exch(o,j-h,j);
}else{
break;
}
}
}
h=h/2;
}
}
private static Boolean greater(Comparable a,Comparable b){
return a.compareTo(b) > 0;
}
private static void exch(Comparable[] o,int a,int b){
Comparable temp;
temp = o[a];
o[a] = o[b];
o[b] = temp;
}
}
性能对比
- 以1-10000完全倒序为例子,最坏的情况下,与插入排序相比较运行时间
- 插入排序
- 希尔排序