數據結構和算法教學
環境設置
數據結構算法基礎
數據結構漸近分析
數據結構基本概念
數組
哈希表
哈希表實例程序(C語言)
鏈表
鏈表實例程序(C語言)
雙向鏈表
循環鏈表
循環鏈表實例程序(C語言)
堆棧
堆棧實例代碼(C語言)
表達式分析
隊列
隊列實例代碼(C語言)
隊列優先級
線性搜索(查找)
線性搜索實例程序(C語言)
二進制搜索(查找)
二進制搜索/查找程序(C語言)
冒泡排序算法
冒泡排序算法實例程序(C語言)
插入排序
選擇排序
選擇排序實例程序(C語言)
合併排序算法
合併排序算法實例程序(C語言)
希爾排序
希爾排序實例程序(C程序)
快速排序
快速排序實例程序(C語言)
圖數據結構
深度優先遍歷
廣度優先遍歷
樹(二叉樹)
樹遍歷
二叉搜索樹
堆
遞歸基礎知識
希爾排序
希爾排序是一種高效排序算法和基於插入排序算法。該算法避免了大的變化作爲插入排序的一種情況,如果較小的值很遠右邊那麼必須移動到最左邊。該算法採用插入排序上廣爲傳播的元素先對它們進行排序,然後排序不太廣泛分佈的元素。 這個間距稱爲間隔。該間隔是根據Knuth的公式所計算 (h=h*3 +1) 其中h爲間隔並且初始值是1。該算法是用於中等大小的數據組很有效,因爲它的平均和最壞情況的複雜性是O(n),其中n爲項目數量。
僞代碼
procedure shellSort( A : array of items )
int innerPosition, outerPosition
int valueToInsert, interval = 1
/* calculate interval*/
while interval < A.length /3 do:
interval = interval * 3 +1
while interval > 0 do:
for outer = interval; outer < A.length; outer ++ do:
/* select value to be inserted */
valueToInsert = A[outer]
inner = outer;
/\*shift element towards right\*/
while inner > interval -1 && A\[inner - interval\] >= valueToInsert do:
A\[inner\] = A\[inner-1\]
inner = inner - interval
end while
/\* insert the number at hole position \*/
A\[inner\] = valueToInsert
end for
/\* calculate interval\*/
interval = (interval -1) /3;
end while
end procedure
要查看C編程語言希爾排序的實現,請點擊這裏