希尔排序
希尔排序是插入排序的变种
它的速度要比堆排序慢些
实现过程一个重点就是步长:
- 取列表长度 // 2,确定初始步长,此时也是最大步长,以间隔步长分组,组内数进行插入排序
- 取 初始步长 // 2,确定第二次步长,以间隔步长分组,组内数进行插入排序
- 循环1,2,直到步长为1
def insert_sort_gap(li, gap):
for i in range(gap, len(li)): #i 表示摸到的牌的下标
tmp = li[i]
j = i - gap #j指的是手里的牌的下标
while j >= 0 and li[j] > tmp:
li[j+gap] = li[j]
j -= gap
li[j+gap] = tmp
def shell_sort(li):
d = len(li) // 2
while d >= 1:
insert_sort_gap(li, d)
d //= 2