目錄
1.希爾排序
2.時間複雜度分析
3.空間複雜度分析
希爾排序(shell sort):是插入排序的一種。是針對直接插入排序演算法的改進。該方法又稱縮小增量排序。
希爾排序是不穩定的演算法,它滿足穩定演算法的定義。對於相同的兩個數,可能由於分在不同的組中而導致它們的順序發生變化。
演算法穩定性--假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!
基本原理:
希爾排序實質上是一種分組排序演算法,通過設定步長,將陣列重新劃分成多個陣列,然後對每個陣列進行直接插入排序。同時沒經過一輪劃分,步長就會減少一半。具體如下所示:以陣列為例
原始陣列 2 5 6 3 4 8 1 7
gap=4 2
56 3 4
8 1 7 --> 分為4組
1輪插入 2 5 1 3 4 8 6 7
gap=2 2 5 1 3 4 86 7 -->分為2組
2輪插入 1 3 2 5 4 7 6 8
gap=1 1 3 2 5 4 7 6 8 -->分為1組
3輪插入 1 2 3 4 5 6 7 8
public class shellsort
arr[k+gap] = temp; //將元素插入到陣列合適位置}}
}} }
}
希爾排序的時間複雜度與增量(即,步長gap)的選取有關。例如,當增量為1時,希爾排序退化成了直接插入排序,此時的時間複雜度為o(n²),而hibbard增量的希爾排序的時間複雜度為o(n^3/2)。
希爾排序屬於原位排序,空間複雜度為o(1)
更多詳細內容詳見假如天空不死的部落格
希爾排序及其分析
希爾排序另一種叫法叫做縮減增量排序 演算法實現 public static void shellsort anytype a int j for int gap a.length 2 gap 0 gap 2 for int i gap ianytype tmp a i for j i j gap t...
排序演算法(三) 直接插入排序演算法及其優化分析
目錄 1.直接插入排序 2.演算法優化分析 3.時間複雜度分析 4.空間複雜度分析 插入排序 就是將乙個元素插入到乙個排好序的有序陣列中。具體怎麼理解呢?對於乙個包含n個陣列的元素,他會從 0,1 區間開始插入排序,即將 1 插入到陣列 的合適位置 接著從 0,2 區間開始排序,即將 4 插入到陣列...
排序演算法 四 希爾排序
希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...