希尔排序的实质就是分组插入排序,该方法有被称为缩小增量排序。
运作:
(1)选择一个步长序列
(2)按照步长序列个数k,对排序序列进行k趟排序
(3)每趟排序,根据对应的步长ti,将待排序序列分割成ti个子序列,分别对各个子序列进行直接插入排序
def shell_sort(lis):
step = len(lis)//2 #步长一般取数组总长度的一半
while step > 0: #步长大于0时,进入循环
for i in range(step,len(lis)): #对半,从后半部分与前半部分进行比较 ,
# 如[1,3,2,5,4,8] 6//2=3 此时step为3,此时将5与1进行比较,如果大,则交换位置
# 然后比较完,i的值减小一个步长 ,然后进入下一个循环,4与3进行比较。在2与8进行比较。
while(i >= step and lis[i]<lis[i-step]):
lis[i],lis[i-step]=lis[i-step],lis[i]
i -= step
# 一轮比较完,步长减半
step //=2
print(lis)
lis=[9,3,5,8,2,7,1]
shell_sort(lis)