python数据结构与算法之希尔排序
简单原理
①
②
③
④
⑤
import random
def insert_sort_gap(li, gap): # gap相邻两组之间对应元素的距离
for i in range(gap, len(li)): # i表示摸到的牌的下标
tmp = li[i]
j = i - gap # j指的是手里的牌的下标(如例图中的'3'和'5')
while j >= 0 and li[j] > tmp:
li[j + gap] = li[j] # 当摸到的牌比手里的牌小,手里的牌向后移gap
j -= gap # 看前面一张牌
li[j + gap] = tmp
def shell_sort(li):
d = len(li) // 2
while d >= 1:
insert_sort_gap(li, d)
d //= 2
li = list(range(10))
random.shuffle(li)
print('希尔排序前:', li)
shell_sort(li)
print('希尔排序后:', li)
参考视频: 清华计算机博士带你学习python算法+数据结构