演算法 希爾排序

2022-03-11 08:43:51 字數 1394 閱讀 8299

希爾排序(shell's sort)是插入排序的一種又稱「縮小增量排序」(diminishing increment sort),是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於2023年提出而得名。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

補充:各種常用排序演算法的複雜度分析:

原始的演算法實現在最壞的情況下需要進行o(n

2)的比較和交換。v. pratt的書[1]

對演算法進行了少量修改,可以使得效能提公升至o(n log2

n)。這比最好的比較演算法的o(n log n)要差一些。

希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序

的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序

,但是到了這步,需排序的資料幾乎是已排好的了(此時插入排序較快)。

假設有乙個很小的資料在乙個已按公升序排好序的陣列的末端。如果用複雜度為o(n

2)的排序(氣泡排序或插入排序),可能會進行n次的比較和交換才能將該資料移至正確位置。而希爾排序會用較大的步長移動資料,所以小資料只需進行少數比較和交換即可到正確位置。

乙個更好理解的希爾排序實現:將陣列列在乙個表中並對列排序(用插入排序)。重複這過程,不過每次用更長的列來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身僅僅對原陣列進行排序(通過增加索引的步長,例如是用i += step_size而不是i++)。

顏色相同表示根據步長被劃分到同一批次中。同一批次中的元素進行插入排序,這樣乙個元素很有可能將朝著最終位置前進一大步。到最後可見需排列的資料幾乎已經拍好了。但是也正是由於陣列元素大小及位置關係的不確定性,導致了該演算法是不穩定的。

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...

排序演算法 希爾排序

摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...

排序演算法 希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...