排序 希爾排序

2022-08-18 19:33:12 字數 1234 閱讀 9169

​ 希爾排序也是一種插入排序,它是簡單插入排序經過改進之後的乙個更加高效的版本,也稱為縮小增量排序。

​ 在排序過程中,把待排序資料按照一定增量分組,對每組資料使用直接插入排序演算法進行排序;隨著增量的減小,每組的資料越來越多;當增量減少為 1 時,整個資料被分為一組,演算法終止,排序完成。

對陣列[ 8, 9, 1 , 7, 6 , 5 , 3 , 4 , 2 , 0 ] 從小到大排序過程如下:

初試時共有 10 個元素

第一次排序

初始步長設定為 10 / 2 = 5,分為 5 個組。即 [8 , 5],[9 , 3],[1 , 4],[7 , 2],[6 , 0],如下圖所示,相同顏色為一組,然後同一組資料進行直接插入排序,排序後陣列為[5 , 3 , 1 , 2 , 0 , 8 , 9 , 4 , 7 , 6]。

第二次排序

步長設定為 5 / 2 = 2,分為 2 個組。即[5 , 1 , 0 , 9 , 7],[3 , 2 , 8 , 4 , 6],如下圖所示,相同顏色為一組,然後同一組資料進行直接插入排序,排序後為 [0 , 2 , 1 , 3 , 5 , 4 , 7 , 6 , 9 ,8]。

第三次排序

步長設定為 2 / 2 = 1,分為乙個組,最後對著組資料進行插入排序即可獲得最終排序完成的結果。

從以上分析可知,希爾排序的排序次數是當增量為 1 時結束。每一次分組之後在組內在此進行排序,直到最終排序完成。

​ 希爾排序實現排序時,對於每一組的數排序可以採用交換法,或者是移動法插入。因為交換法的效率並不高,所以下面**僅展示移動法。

public static void shellsort(int arr) 

for (int gap = arr.length / 2; gap > 0; gap /= 2)

arr[j] = temp;//插入元素}}

}}

排序 希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序 希爾排序

縮小增量排序 待排序列按關鍵字基本有序時,直接插入排序的效率很高 希爾排序思想 將整個待排記錄分割為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序,就可以完成整個排序工作 增量序列中的值沒有除1以外的公因子,且最後乙個增量必須等於1 子串行的構成不是逐...

排序 希爾排序

希爾排序是插入排序中的乙個分支,但是較簡單插入排序又有較大的改進,這使得它成為了歷史上第一批突破二次時間屏障的排序演算法之一哦。它是通過比較一定間隔的元素來工作的。因此希爾排序又稱為縮小增量排序。直接插入排序對於原始資料基本有序的情況下,效率較高。在此的基礎上。我們可以想辦法,使資料基本有序,然後利...