希爾排序

'''
將數組列在一個表中,分別進行插入排序。先以步長爲一半,列表。而後對每一列進行排序。
而後將排好序的,再按照步長爲一半,列表進行排序。
最後進行插入排序
'''
def shell_sort(lst):
    n = len(lst)

    gap = n//2 #按照總長度的一半進行分列,而後進行 行排序
    while gap > 0:
        for i in range(gap,n):
            j = i
            #按照步長進行排序
            while j>= gap and lst[j-gap] > lst[j]:#對索引位置進行有規律的使用
                # j-gap表示每一列上的元素,j發生變化,列發生變化
                lst[j-gap],lst[j] = lst[j],lst[j-gap]
                j -= gap#向上一行
        gap = gap//2#縮小比較的列的個數

lst = [54,26,93,17,77,31,44,55,20]
shell_sort(lst)
print(lst)