基礎演算法系列 之希爾排序

琅曉琳發表於2021-01-02

希爾排序和上文中的直接插入一樣,都是插入排序的一種。之前直接插入排序的缺點是假如小數在靠後的位置,則其前面的數都要前提,希爾排序則是先取步長,這樣可以減少移動的次數。
希爾排序的準則就是“先取步長,再分小組;以組為準,組內排序”。基本程式碼如下:

public static void shellSort(int[]arr){
	for(int d=arr.length/2;d>0;d/=2){		//遍歷所有步長
		for(int i=d;i<arr.length;i++){		//遍歷所有元素
			for(int j=i-d;j>=0;j-=d){	//遍歷本組元素
				if(arr[j]>arr[j+d]){
					if(arr[j]>arr[j+d]){
						int temp=arr[j];
						arr[j]=arr[j+d];
						arr[j+d]=temp;
					}
				}
			}
		}
	}
}

優點是可以將右邊小數和左邊大數快速移動到相應位置。

相關文章