希尔排序需要确定折叠基数,需要根据array的长度来设定步长序列
def shell_sort(arr):
temp = 1
gap = 1
while gap < len(arr)//2:
gap = gap * 2 +1
print(gap) # 生成gap的步长序列,出来的是最大gap,折叠基数为2,2比较好理解点
while gap>0: # 步长大于0
for i in range(gap,len(arr)): # 这个相当于折叠后的第二段
temp = arr[i] # 这个是折叠第二段的第一个元素,如果运行下去就是第二段的循环次数个元素
for j in range(i,0,-gap): # 这个是折叠的第一段的元素
if arr[j] < arr[j - gap]: # 如果第一段的元素大于第二段的元素(对应位置)
arr[j], arr[j - gap] = arr[j - gap], arr[j] # 交换位置
else:
break # 不是就不用交换位置
gap//=2 # 下一个步长开始