排序演算法(四) 希爾排序及其優化分析

2021-09-13 20:19:18 字數 1275 閱讀 8808

目錄

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 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...