這篇用到直接插入排序,建議先閱讀上一篇:直接插入排序算法
希爾排序(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
才行。