package sort;
public class ShellDemo {
/**
* 希尔排序
* 此排序算法强调的最佳因子的选择
* @param a
*/
public static void sort(Comparable[] a){
int N = a.length;
int H = 1; // H表示的是因子
while (H < N/3)
H = 3*H +1;
while (H >= 1){
for (int i = H;i < N;i ++){
for (int j = i;j >= H && less(a[j],a[j-H]); j -= H)
exch(a,j,j-H);
}
H = H /3;
}
}
/***
* 比较大小 前者是否大于后者
* @param v
* @param w
* @return
*/
public static boolean less(Comparable v,Comparable w)
{
return v.compareTo(w) < 0;
}
/**
* 交换两个值
* @param a
* @param i
* @param j
*/
public static void exch(Comparable []a, int i,int j){
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
}