一、希尔排序思路:
希尔排序是一种分组插入排序算法。
首先取一个整数d1=n/2,将元素分为d1个组,每组相邻量元素之间距离为d1,
在各组内进行直接插入排序;取第二个整数d2=d1/2,重复上述分组排序过程,
直到di=1,即所有元素在同一组内进行直接插入排序。
希尔排序每趟并不使某些元素有序,而是使整体数据越来越接近有序;最后一趟排序使得所有数据有序。
图解:
---间隔---
---间隔---
代码实现:
li=[5,7,4,6,3,1,2,9,8]
def shell_sort(li):
gap = len(li) // 2
while gap > 0:
for i in range(gap, len(li)):
tmp = li[i]
j = i - gap
while j >= 0 and tmp < li[j]:
li[j + gap] = li[j]
j -= gap
li[j + gap] = tmp
gap //= 2
shell_sort(li)
print(li)