python語言實現希爾排序
希爾排序:
以下為舉例說明希爾排序用法
54,26, 93,17,77,31,44,55,20
取gap為4:從54開始作為第一個,加4取出第二個
54 77 20 20 54 77
26 31 26 31
93 44 44 93
17 55 17 55
把每一行看作一個獨立新序列,每一行的序列進行插入排序,插入排序結束後,在以原間距位置組合成一個序列
20,26,44,17,54,31,93,55,77
再縮小gap,gap=2,以20為開始,加2,取出第二個,後面依次類推
20 44 54 93 77 20 44 54 77 93
26 17 31 55 17 26 31 55
把每一行看作一個獨立新序列,每一行的序列進行插入排序,插入排序結束後,在以原間距位置組合成一個序列
20 17 44 26 54 31 77 55 93
再次縮小,gap=1,以20為開始,加1,取出第二個,後面依次類推(因為間隔為一相當於為一個序列,直接進行插入排序)
17 20 26 31 44 54 55 77 93
python實現希爾排序的程式碼如下:
# coding:utf-8
def shell_sort(alist):
"""希爾排序"""
n = len(alist)
#python2中去整數除法用/,python3中去整數除法用/ /
gap = n//2
while gap > 0:
for j in range(gap,n):
i = j
while i > 0:
if alist[i] < alist[i - gap]:
alist[i], alist[i - gap] = alist[i - gap], alist[i]
i = i - gap
else:
break
gap = gap//2
if __name__ =="__main__":
li = [54,26,93,17,77,31,44,55,20]
print(li)
shell_sort(li)
print(li)
希爾排序的最優時間複雜度:不確定
最壞時間複雜度:O(n的2次方)