希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率很高,因此希尔排序在时间效率 上比直接插入排序有较大提高。
插入排序是增量为1的希尔排序
原理图示
稳定性
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定的。
Python实现
def shell_sort(lst):
length = len(lst)
gap = length // 2
while gap >= 1:
for i in range(gap, length):
while i > 0:
if lst[i] < lst[i - gap]:
lst[i], lst[i - gap] = lst[i - gap], lst[i]
i -= gap
else:
break
gap //= 2
return lst
if __name__ == '__main__':
lst = [8, 9, 1, 7, 2, 3, 5, 4, 6, 0]
print(shell_sort(lst))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]