1. 程式人生 > >希爾排序(Java實現)

希爾排序(Java實現)

希爾排序是對插入排序的改進,交換的是不相鄰的元素以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序。希爾排序先使陣列中任意間隔為h的元素都是有序的,這樣的陣列被稱為h有序陣列(一個h有序陣列即一個由h個有序子陣列組成的陣列),在進行排序時,如果h很大,就能將元素移動到很遠的地方,為實現更小的h有序創造方便。
希爾排序又稱“縮小增量排序”,對於每個h,用插入排序將h個子陣列獨立地排序,只需要在插入排序的程式碼中將移動元素的距離由1改為h即可,這樣希爾排序的實現就轉化為一個類似於插入排序但使用不同增量的過程。
希爾排序的執行時間依賴於增量序列,希爾增量時間複雜度為O(N^2),Hibbard增量的希爾排序時間複雜度為O(N的1.5次方),下界為N*log2N,不穩定的排序演算法。
Java實現程式碼如下:

	public static void shellSort(int[] a){
		int N = a.length;
		
		for(int h = N / 2; h > 0; h /= 2){//希爾增量
			for(int i = h; i < N; i++){
				//將a[i]插入到a[i-h],a[i-2h],a[i-3h]...中
				for(int j = i; j >= h && a[j] < a[j - h]; j -= h){
					int temp = a[j];
					a[j] = a[j-h];
					a[j-h] = temp;
				}
			}
		}
	}