希尔排序,利用java语言实现
public class Shell {
/*
对数组内的元素进行排序
*/
public static void sort(Comparable[] a) {
//1.根据数组a的长度,确定增长量h的初始值
int h = 1;
while(h < a.length/2){
h = 2*h+1;
}
//2.希尔排序
while(h>=1){
for(int i = h; i < a.length; i++){
//2.1找到待插入的元素
for(int j = i; j >= h; j-=h){
//2.2把待插入的元素插入到有序数列中
//待插入的元素是a[j],比较a[j]和a[j-h]
if(greater(a[j-h],a[j])){
//交换元素
exch(a,j-h,j);
}else{
//待插入元素已经找到了合适的位置,结束循环
break;
}
}
}
//减小h的值
h = h/2;
}
}
/*
判断v大于w
*/
private static boolean greater(Comparable v,Comparable w){
//大于0表示v > w
return v.compareTo(w)>0;
}
/*
交换a数组中,索引i和索引j处的值
*/
private static void exch(Comparable[] a,int i,int j){
Comparable temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}