什么是希尔排序?
9个元素的列表,整除2得到4
d为4时,每隔四个元素分为一组,一共四组
然后进行一次插入排序,这里仅展示结果没有列出详细的过程
接下来再把d整除2
d为2时,把元素分为2组,每隔两个元素分组
每组再进行一次插入排序(下面一组已经有序所以没有变化)
d再整除2,此时d为1,相当于直接进行一次插入排序
希尔排序可以直接引用插入排序的代码,插入排序是拿第一个元素一个一个比较,希尔排序是每组的元素同时比较,如下所示:
完整代码:
import random
def insert_sort(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(li,d)
d //= 2
li = list(range(1000))
random.shuffle(li)
shell_sort(li)
print(li)
range函数生成1000个随机数,shuffle方法打乱顺序
运行结果: