package algorithm.sort;
public class Shell {
public static void sort(Comparable[] a){
int h = 1;
while (h < a.length/2){
h = 2*h+1;
}
while (h>=1){
for (int i = h ; i < a.length ; i ++){
for (int j = i ; j >=h ; j -= h){
if (greater(a[j-h],a[j])){
exchange(a,j-h,j);
}else{
break;
}
}
}
h /= 2;
}
}
public static boolean greater(Comparable v,Comparable w){
return v.compareTo(w) > 0;
}
public static void exchange(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
package algorithm.test;
import algorithm.sort.Shell;
import java.util.Arrays;
public class ShellTest {
public static void main(String[] args) {
Integer[] array = {5,3,4,1,2};
Shell.sort(array);
System.out.println(Arrays.toString(array));
}
}
得到结果
[1, 2, 3, 4, 5]