希爾排序的基本思想是:將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列(步長更長了,列數更少了)來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。
def shell_sort(alist):
"""希爾排序
:param alist:
:return:
"""n = len(alist)
gap = n // 2
while gap >= 1:
# j是需要比較的次數
for j in range(gap, n): # 3---7
# i 是需要控制的索引
i = j
# 比較的邏輯和控制i的變換的邏輯
while (i - gap) >= 0:
if alist[i] < alist[i-gap]:
# 交換
alist[i], alist[i-gap] = alist[i-gap], alist[i]
# 修改i
i -= gap
else:
break
# 控制間隙的變化
gap //= 2
if __name__ == '__main__':
li = [6, 7, 5, 3, 4, 1, 8]
shell_sort(li)
print(li)
希爾排序是首先將傳入的列表分為(列表長度//2)段, 此案例分為2段,用第二段的第乙個數b與第一段第乙個a數比較大小, 如果b全部迴圈之後再將列表按照(上次分割的短數//2)段,此案例分為1段,也就是變成了乙個依舊不是規律的陣列,最後進行插入排序 希爾排序 Python實現
基本思想 希爾排序 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 子串行...
希爾排序Python實現
python 實現 希爾排序,希爾排序其實 就是 插入排序的改進版吧,希爾排序的步長選擇都是從d len 2開始,每次再減半,直到最後為1,當變為1的時候 可以認為就是簡單的插入排序。這種縮小步長的好處,非常簡單,彌補了插入排序的缺點,盡可能減少數字的移動次數。希爾思想是這樣 區域性看起來有序,然後...
Python實現希爾排序
希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。希爾排序 n len alist 初始步長 gap n 2 while ga...