0. 介绍
程序运行过程:
原始数组
91, 33, 82, 21, 10, 5, 44, 3, 38, 37
91比5大——交换。33比44小——不变。82比3大——交换。21比38小——不变。10比37小——不变。
一轮比较完成
排序后的新数组
5, 33, 3, 21, 10, 91, 44, 82, 38, 37
缩短间隔进行判断
5比3大——交换。33比21大——交换。5比10小——不变。以此类推,最后进行两两判断,然后整个数据就都是有序的了。
动图:
1. 代码实现
def shell_sort(arr):
d=len(arr)//2
while d>0:
for i in range(d,len(arr)):
current=arr[i]
j=i
while j>=d and current<arr[j-d]:
arr[j]=arr[j-d]
j-=d
arr[j]=current
d//=2
return arr
完整代码: