希尔排序
希尔排序是插入排序的变种
它的速度要比堆排序慢些
实现过程一个重点就是步长:
- 取列表长度 // 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