並べ替えシリーズ(四)---ヒル並べ替え

1302 ワード

//author:lilywangcn


public class ShellSort {
	private static int[] array=new int[]{10,30,20,4, 9,-1,6,15,12,8,0,20,4};
	public static void main(String[] args){
		print();
		for(int gap=array.length/2; gap>0; gap/=2){
			System.out.println("gap="+gap);
			for(int i=0;i<gap;i++){
				insertosrt(i,gap);
			}
			print();
		}
	//	print();
	}
	
	private static void insertosrt(int i,int gap){
		for(int j=1;i+gap*j<array.length;j++){
			int tmp=array[i+gap*j];
			int k=j-1;
			while(k>=0&& i+gap*k>=0 &&array[i+gap*k]>tmp  ){
				array[i+gap*(k+1)]=array[i+gap*k];
	//			print();
				k--;
			}
			array[i+gap*(k+1)]=tmp;
	//		print();
		}
	}
	
	private static void print(){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println("");
	}
}

アルゴリズム複雑度:O(n*n)、アルゴリズム不安定
実行結果:
 
10 30 20 4 9 -1 6 15 12 8 0 20 4 
gap=6
4 15 12 4 0 -1 6 30 20 8 9 20 10 
gap=3
4 0 -1 4 9 12 6 15 20 8 30 20 10 
gap=1
-1 0 4 4 6 8 9 10 12 15 20 20 30