希爾排序(shell sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。
希爾排序的基本思想是:將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列(步長更長了,列數更少了)來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。
def
shell_sort
(alist)
: n =
len(alist)
# 初始化步長
gap = n//
2# 分成了兩部分
while gap >0:
# 執行了多少次插入排序演算法
for j in
range
(gap,n)
: i = j
# 執行插入排序演算法
while i >0:
if alist[i]
< alist[i-gap]
: alist[i]
,alist[i-gap]
= alist[i-gap]
,alist[i]
i -= gap
else
:break
gap //=
2# 測試
if __name__ ==
'__main__'
: alist =[54
,26,93
,17,77
,31,44
,55,20
] shell_sort(alist)
print
(alist)
# 時間複雜度
# 最優的時間複雜度 :根據步長序列的不同而不同
# 最壞的時間複雜度 :根據步長設為 1 則相當於插入排序為 o(n2)
# 穩定性:不穩定
排序演算法 希爾排序
如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...
排序演算法 希爾排序
摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...
排序演算法 希爾排序
希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...