算法原理
希尔排序是对插入排序的改进,它对序列取了一个间隔,对指定间隔的元素进行插入排序,并逐步降低间隔,原理图如下:
时间复杂度
最坏时间复杂度 为O(n^2),最优时间复杂度为取决于步长序列的不同而不同。
算法步骤
- 选取一个间隔gap,将序列可以分成多组
- 对各个组进行插入排序的时候,不是先对一个组进行排序完再对另一个组进行排序,而是轮流对每个组进行插入排序。
- 减小gap,重复上面的步骤。
- 待基本有序后,最后执行插入排序(gap=1)。
算法实现
def shell_sort(alist):
n =len(alist)
gap = n // 2
while gap > 0:
for j in range(gap,n):
i = j
while i > 0:
if alist[i] < alist[i-gap]:
alist[i],alist[i-gap] = alist[i-gap],alist[i]
i -=gap
else:
break
gap //= 2
return alist
if __name__ == "__main__":
print(shell_sort([3,10,5,2,1,7,6,9,8,12,15,13]))
总结:
有一篇非常有趣的讲希尔排序的文章供大家参考一文读懂希尔排序。