目錄
希爾排序
一、操作方法
二、排序方法:
三、**演示
四、c#實現**
五、效能分析:
希爾排序又稱「縮小增量排序」。基本思想:先取乙個小於n的整數d1作為第乙個增量,然後把檔案的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同個乙個組中,現在各組內進行直接插入排序;然後,取第二個增量d2實質上希爾排序也是直接插入排序一種,只是它是分組插入的,相比直接插入而言,它的效率更高一點,首先它把較大的資料集合分割成若干個小組(邏輯上分組),然後對每乙個小組分別進行插入排序,此時,插入排序所作用的資料量比較小(每乙個小組),插入的效率比較高。
操作流程圖:
一般取d1=n/2,di+1=di/2。如果結果為偶數,則加1,以保證di為奇數。
如上圖所示,目前這組資料有10個數,這是將這組資料分組,根據公式d1=n/2,則第一趟排序為10/2=5,將資料分為5組。這5組資料那兩個為一組呢?這時就看他們中間的空,因為第一趟排序d=5組,所以以他們中間的空為準,就是說隔五個空格為一組。
這裡所要注意的是如果出現除完之後結果為小數的則向下取整。
例如:5/2=2.5,所以這裡應該取2。在分組的時候隔兩個空為一組。
由於多次插入排序,我們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是不穩定的。
相關部落格
using system;
list[k + _d] = temp;//插入最後比它小的後面}}
}}console.writeline("第一次d->" + _d);
for (int i = 0; i
,", list[i]));
}console.writeline("");
_d = _d / 2;}}
}
空間效率:僅僅使用了常數個輔助單元,空間複雜度為o(1)
時間效率:由於其是依賴於增量函式的排序,在某個特定範圍內,希爾排序的時間複雜度約為o(n^1.3),最壞情況下時間複雜度為o(n^2)。
穩定性:在劃分字表的同時,會造成元素相對位置的變化,因此是不穩定的。
適用性:希爾排序演算法僅僅適用於當線性表為順序儲存的情況。
資料結構演算法之希爾排序
希爾排序的最大間隔是利用公式 h h 3 1 當前h設定為1 減小間隔公式 h h 1 3 h 4 while h 0 array 0 2 array 2,23,34,1,12,4,15,67,23 第二次 i 5 temp array 5 4 j 5 while j 3 array 1 4 arr...
資料結構 十大經典排序演算法之希爾排序
第一部分 演算法思想 希爾排序由shell在1959年發明,又叫縮小增量排序,是第乙個突破o n 2 的排序演算法,屬於簡單插入排序的改進版,會優先比較距離較遠的元素。第二部分 演算法步驟 選擇乙個增量序列 每趟排序,根據對應的增量,將待排序列分割成若干子串行,分別對各子串行進行直接插入排序 按增量...
資料結構 演算法 希爾排序
希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...