排序的顺序其实并非按照各分组依次插排进行的,而是在分组间不停的跳跃,直到循环完成,对每一个分组都排好序。这实际上是找到各分组插排实现的共性,放到一起以简化代码【有点子各分组并行的意思】。
def shellsort(arr):
lenth = len(arr)
gap = lenth // 2
while gap >= 1:
for i in range(gap, lenth):
j = i
while j-gap >= 0 and arr[j] < arr[j-gap]:
arr[j] , arr[j-gap] = arr[j-gap], arr[j]
j = j - gap
gap = gap // 2
return arr
gap = 4
gap = 2