/**
* 希爾排序:
* 每次都將元素分成一些小組,在小組內進行排序。
* 小組根據元素數量劃分。
* 小組跨度一般是元素數量的一半。
* 此後每次跨度都除以二。
* 一直到最後,小組跨度變成1。
* 這樣就變成插入排序了。
* * 希爾排序的複雜度和增量序列是相關的
* 這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度(最壞情形)是o(n^2)
* hibbard提出了另乙個增量序列,這種序列的時間複雜度(最壞情形)為o(n^1.5)
* sedgewick提出了幾種增量序列,其最壞情形執行時間為o(n^1.3),其中最好的乙個序列是
** @param arr
*/public static void xiersort(int arr)
arr[j + span] = tmp; //
}span = span / 2;}}
/*** 這種方法好理解一些,外面就是跨度。裡面和簡單插入一模一樣
* @param arr
*/public static void xiersort2(int arr) else }}
span = span / 2;
}}
排序方法
平均情況
最好情況
最壞情況
輔助空間
穩定性氣泡排序n2n
n21穩定選擇排序
n2n2n21
不穩定插入排序n2n
n21穩定希爾排序
n*logn~n2
n1.3n21
不穩定堆排序
n*logn
n*lognn21
不穩定歸併排序
n*logn
n*logn
n*lognn穩定
快速排序
n*logn
n*lognn21
不穩定
排序演算法 四 希爾排序
希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...
排序演算法(四) 希爾排序 增量排序
希爾排序思想 將現有資料分為d個組,在每個分組內使用直接插入排序演算法,使得整個資料段越來越有序。接著繼續將資料分組並使用直接插入排序 分組會越來越小 直到分組為1。每個分組數一般互質 時間複雜度 o n 1.3 1.5 空間複雜度 o 1 穩定性 不穩定 void shell int arr,in...
排序演算法總結(四)希爾排序
希爾排序又稱縮小增量排序,是插入排序的一種。它的基本思想是先將整個待排記錄序列分割成若干個子串行,然後對這若干個子串行分別進行直接插入排序,等到待排序列基本有序時,再對整個序列進行直接插入排序。比如如下陣列,先已step 5進行分割。49,38,65,97,76,13,27,49,55,4 由於st...