資料結構與演算法(七) 希爾排序的python實現

2021-09-12 12:09:14 字數 1026 閱讀 4276

希爾排序是改進的一種插入排序。

和插入排序有些不同的是,加入了乙個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.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...