package SuanFaSort;
public class Shell {
public static void sort(Comparable[] a){
//1.根据数组a的长度,确定增长量h的初始值;
int h=1;
while (h{//循环的次数
//修正值(步长值)
h=2*h+1;
}
//2.希尔排序
while (h>=1){
//排序
//2.1找到待插入的元素
for (int i=h;i;i++){
//2.2 把待插入的元素
for (int j=i;j>=h;j-=h){
//待插入的元素是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;
}
}
private static boolean greater(Comparable v,Comparable w){
return v.compareTo(w)>0;
}
public static void exch(Comparable[] a,int i,int j){
Comparable temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
package SuanFaSort;
import java.util.Arrays;
public class ShellTest {
public static void main(String[] args) {
Integer[] arr={2,3,4,5,6,4,3,5,9,8,7};
Shell.sort(arr);
System.out.println(Arrays.toString(arr));
}
}