public class Example {
public static boolean less(Comparable v1,Comparable w1){
int v=Integer.parseInt((String)v1);
int w=Integer.parseInt((String)w1);
if (v<w)
return true;
else
return false;
}
protected static void each(Comparable[] a,int i,int j){
Comparable t =a[i];
a[i]=a[j];
a[j]=t;
}
protected void show(Comparable[] a){
for (int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
public static boolean isSorted(Comparable[] a){
for (int i=0;i<a.length;i++){
if (less(a[i],a[i-1])){
return false;
}
}
return true;
}
}
public class Example03 extends Example {
/**
* 对相隔h的子数组进行插入排序。
* 希尔排序
*/
public static void sort03(Comparable[] a){
int N=a.length;
int h=1;
//这个while循环只为了求出h的初值。这里选择的是h从N/3递减到一,故 while (h<N/3)。
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--){
each(a,j,j-h);
}
}
h=h/3;
}
}
public static void main(String[] args) {
String []a={"2","5","3","4","6","1"};
sort03(a);
System.out.println(a);
for (int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}