核心思想

1、将序列按固定步长分组,组内进行插入排序 2、缩小步长,重复步骤一,直到步长小于等于1

def shell_sort(lst):
    n = len(lst)
    gap = n // 2
    while gap >= 1:
        for i in range(gap, n):
            for j in range(i, 0, -gap):
                if lst[j] < lst[j - gap]:
                    lst[j], lst[j - gap] = lst[j - gap], lst[j]
                else:
                    break
        gap = gap // 2

时间复杂度:
    最优:$O(n)$
    最坏:$O(n^2)$
    平均:$O(n^{1.3})$
空间复杂度: $O(1)$
稳定性: 不稳定