问题描述
希尔排序(Shell Sort)是一种分组插入排序算法。
首先取一个整数d=n/2,将元素分为d个组,每组相邻量元素之间距离为d,在各组内进行直接插入排序;
取第二个整数d=d/2,重复上述分组排序过程,直到d=1,即所有元素在同一组内进行直接插入排序。
希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序;最后一趟排序使得所有数据有序。
import random
def insert_gap(li, gap):
for i in range(gap, len(li)-1):
tmp = li[i]
j = i - gap
if j >= 0 and li[j] >= tmp:
li[i] = li[j]
j -= gap
li[j+gap] = tmp
def sort(li):
d = len(li)//2
while d>=1:
insert_gap(li,d)
d = d//2
li= list(range(10))
random.shuffle(li)
print(li)
sort(li)
print(li)
结果展示
[4, 2, 5, 6, 3, 1, 0, 7, 9, 8]
[0, 1, 3, 2, 4, 5, 6, 7, 9, 8]