一、什么是希尔排序
希尔排序是一种基于插入排序的算法,但它不是一次性将所有元素都插入到已排序的部分,而是通过逐渐缩小元素之间的距离来使数组变得有序。
二、算法思路
- 将待排序的数组元素按下标的一定增量分组,使增量逐渐减少,最后增量为1。第一次分组为d1 = 数组长度n // 2 。
- 对每组使用直接插入排序算法排序。
- 继续分组d2 = d1 // 2 , 当增量减至1时,整个数组被分为一组,算法便终止。
三、代码实现
def insert_sort_gap(li, gap):
for i in range(gap, len(li)): # i 表示摸到的牌的下标
tmp = li[i]
j = i - gap #j指的是手里的牌的下标
while j >= 0 and li[j] > tmp:
li[j+gap] = li[j]
i -= gap
li[j+gap] = tmp
def shell_sort(li):
d = len(li) // 2
while d >= 1:
insert_sort_gap(li,d)
d //= 2
li = list(range(10))
shell_sort(li)