def shellSort(alist):
# 间隔设定
sublistcount = len(alist) // 2
while sublistcount > 0:
# 子列表排序
for startposition in range(sublistcount):
gapInsertionSort(alist, startposition, sublistcount)
print("After increments of size", sublistcount, "The list is", alist)
# 间隔缩小
sublistcount = sublistcount // 2
def gapInsertionSort(alist, start, gap):
for i in range(start + gap, len(alist), gap):
currentvalue = alist[i]
position = i
while position >= gap and alist[position - gap] > currentvalue:
alist[position] = alist[position - gap]
position = position - gap
alist[position] = currentvalue
alist = [1, 12, 3, 312, 13, 11, 14]
shellSort(alist)
print(alist)
对谢尔排序的详尽分析比较复杂,大致说是介于O(n)和O(n^2)之间