转载请注明出处:http://blog.csdn.net/droyon/article/details/8780607
/**
* 希尔排序 又叫缩减增量排序
* 在使用增量h的一次排序之后,对于每一个i,我们都有a[i](小于等于)a[i+k]。所有相隔h的元素都被排序
* 增量序列的不同,时间复杂度也不同。
* 下面程序所用增量,是希尔增量,即默认增量,最坏时间分析为O(N的平方)
* Hibbard提出了他的增量,形如:1,3,5,7....(2的k次方-1),这个增量的好处在于增量之间没有公因子。最坏时间复杂度为O(N的2分之3次方)
* sedgewick提出了集中增量序列计算方式,时间复杂度为o(n的3分之4次方)
* 增量公式:9*4i次幂-9*2i次幂+1,或者 4i次幂-3*2i次幂+1
* @author
*
*/
public class ShellSort {
private static int[] array = new int[]{1,8,2,9,3,7,11,23,90,4,5};
public static void main(String args[]){
System.out.println("排序前");
printArray();
shellSort();
System.out.println("\n排序后");
printArray();
}
public static void shellSort(){
for(int gap = array.length/2;gap>0;gap /=2){
for(int i=gap;i<array.length;i++){
int temp = array[i];
int j;
for(j=i;j>=gap&&temp<array[j-gap];j-=gap){
array[j] = array[j-gap];
}
array[j] = temp;
}
}
}
public static void printArray(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
运行结果:
排序前
1 8 2 9 3 7 11 23 90 4 5
排序后
1 2 3 4 5 7 8 9 11 23 90