希爾排序

這篇用到直接插入排序,建議先閱讀上一篇:直接插入排序算法

希爾排序(Shell's Sort)是插入排序的一種 “縮小增量排序”,直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因D.L.Shell於1959年提出而得名。

希爾排序是把記錄按下標的一定分量分組,對每組使用 直接插入算法排序 ;隨着增量逐漸減小,每組包含的關鍵詞越來越多,當增量減至 1 的時候,整個文件恰被分成一組,算法便終止。

java實現:

public static void Shell_Sort(int[] arr)
	{
		int increment = arr.length;
		int i, j, temp;
		do {
			increment = increment/3 + 1;
			for(i = increment + 1; i < arr.length; i ++)
			{
				if(arr[i] < arr[i-increment])
				{
					temp = arr[i];
					for(j = i - increment; j > 0 && arr[j] > temp; j-=increment) //大於temp(arr[i])的後移
						arr[j+increment] = arr[j];
					arr[j+increment] = temp;         //將arr[i]插入
				}
				
			}
		} while (increment > 1);
	}

這裏的increment【也就是增量選取非常關鍵】,可究竟應該選取什麼樣的增量纔是最好,目前還是一個數學難題,迄今還沒有

人找到一種最好的增量序列。希爾排序時間複雜度爲 O(  n^(3/2)  )。需要注意的是,增量序列的最後一個增量值必須等於1

才行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章