希爾排序是改進的一種插入排序。
和插入排序有些不同的是,加入了乙個gap,這個gap有規律地變化,使得原list分成不同的子串行,分別對子序列進行插入排序。
具體實現如下:
def
shell_sort
(alist)
:'''希爾排序(公升序)'''
n =len(alist)
gap = n//
2#python3取整
while gap>=1:
for i in
range
(gap,n)
:#while i > 0 : 這種方式也可以,不過,i-gap會小於0,在python的list裡也是適用的,所以我有些點不放心,加了(i-gap)>=0這個條件。
while i >
0and
(i-gap)
>=0:
if alist[i]
: alist[i]
,alist[i-gap]
= alist[i-gap]
,alist[i]
i-=gap
else
:break
gap//=
2#最後以1步長進行排序(此時就是簡單的插入排序了)
if __name__ ==
"__main__"
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
shell_sort(li)
print
(li)
輸出:
[54,
26,93,
17,77,
31,44,
55,20]
[17,20
,26,31
,44,54
,55,77
,93]
資料結構與演算法 希爾排序
希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...
資料結構 演算法 希爾排序
希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...
資料結構與演算法(八)希爾排序
希爾排序 1.希爾排序的產生 希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。2.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...