希尔排序
参考: 希尔排序(图文并茂)
# shellsort
def shell_sort(li):
n = len(li)
# 设置 步长
gap = n // 2
# 步长从大到小,最后必须按照1步长排序
while gap >= 1:
# 从步长位置遍历剩下数据,分组,让每组的数据排序
for i in range(gap, n):
# 拿当前位置与减步长的位置的数据比较
while (i - gap) >= 0:
if li[i] < li[i - gap]:
li[i], li[i - gap] = li[i - gap], li[i]
i -= gap
else:
break
gap //= 2
if __name__ == '__main__':
l = [6, 5, 6, 3, 2, 7]
shell_sort(l)
print(l)
# 稳定性:不稳定
# 时间复杂度:跟步长相关