#coding:utf-8
#希爾排序,穩定性:是不穩定的
defshell_sort
(alist)
: n=
len(alist)
gap=n//
2#取步長,總長度除2,取整數
# i=gap
# for i in range(gap,n):
# i=[gap,gap+1,gap+2,gap+3+...+n-1]
# while:
# if alist[i]# alist[i],alist[i-gap]=alist[i-gap],alist[i]
while gap>0:
#插入演算法,與普通的插入演算法相比,就是多了步長
for j in
range
(gap,n)
: i=j
while i>0:
if alist[i]
: alist[i]
,alist[i-gap]
=alist[i-gap]
,alist[i]
i-=gap
else
:break
gap//=
2#必須要有步長,沒有將進入死迴圈
if __name__==
"__main__"
: li =[17
,20,93
,54,77
,31,44
,55,226
]print
(li)
shell_sort(li)
print
(li)
006 排序演算法 希爾排序
一 概述 希爾排序 shell s sort 是插入排序的一種又稱 縮小增量排序 diminishing increment sort 是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法。該方法因d.l.shell於1959年提出而得名。排序方法 時間複雜度 平均 時間複雜度 最...
python之希爾排序演算法實現
usr bin env python coding utf 8 author richard kong 希爾排序 shell sort 是插入排序的一種,也稱為縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非常穩定的排序演算法 希爾排序是把記錄按下錶的一定增量分組,對每組使用直...
演算法 希爾排序及其Python實現
希爾排序思想 有點類似歸併可以分為兩步 1 拆分 2 排序。並且不斷重複這兩個步驟。拆分 gap將資料拆成乙個個小的邏輯小組,並且gap不斷減少。一開始每個組最多只有2個元素,最後慢慢變成整體資料的一半,然後變成整體。而gap從一開始的int len 2 最後變為2.排序 對每個小組進行插入排序。思...