希爾排序 Python實現

2021-08-08 20:40:11 字數 851 閱讀 4173

基本思想

"""

希爾排序

"""def

shell_insert_sort

(a,dk):

n = len(a)

for k in range(dk): # 間距取dk,一共可以組成dk個子序列

for i in range(k+dk,n,dk):#第0,dk,2dk....為一組

temp = a[i] # 記錄待插入的元素值

j = i - dk # 子串行的前乙個元素

while j>=k and a[j]>temp:# 尋找插入的位置

a[j+dk] = a[j]

j = j - dk

a[j+dk] = temp # 插入

showarr(a)

defshell_sort

(a):

n = len(a)

dk = n//2

#取第乙個dk,長度的一半

while dk>=1:

shell_insert_sort(a,dk)

dk = dk//2

defshowarr

(arr):

n = len(arr)

for j in range(n):

print(arr[j],end=' ')

print('\n')

deftest

(): a = [49,38,65,97,76,13,27,49,55,4]

shell_sort(a)

if __name__ == '__main__':

test()

希爾排序Python實現

python 實現 希爾排序,希爾排序其實 就是 插入排序的改進版吧,希爾排序的步長選擇都是從d len 2開始,每次再減半,直到最後為1,當變為1的時候 可以認為就是簡單的插入排序。這種縮小步長的好處,非常簡單,彌補了插入排序的缺點,盡可能減少數字的移動次數。希爾思想是這樣 區域性看起來有序,然後...

希爾排序 python實現

希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 param alist ...

Python實現希爾排序

希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。希爾排序 n len alist 初始步長 gap n 2 while ga...