希尔排序,它是简单插入排序经过改进后的一个更高效的版本。
希尔排序属于插入排序。
希尔排序也称为缩小增量排序。

思想:

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

图示:
按4进行逻辑上的 分组
增量为4
每组进行排序:

这就是第一次按照4排序完得到的结果
12345786
<mark>然后再上个增量上缩小一半变成2</mark>


上图是第二次增量为2的逻辑分组
接下来进行第二次的希尔排序

第二次希尔排序的结果为:
12435687

继续
第三次再次缩小一半增量为1
逻辑分组:

进行每一组(第一组)的排序后:

ok

用python实现希尔排序

def shell_sort(arr):
    n = len(arr)
    gap = n//2
    while gap > 0:
        for i in range(gap, n):
            while i >= gap and arr[i] < alist[i - gap]:
                arr[i], arr[i - gap] = arr[i - gap], arr[i]
                i -= gap
                #print(arr)
        gap //= 2
    return arr