算法思想
参考:希尔排序
希尔排序是一种高效的排序方式,它是基于插入排序的一种排序算法。它相比插入排序能够有效的避免大量的移动操作。
这种算法使用插入排序,只是比较的时候使用的是很远的数据进行比较,然后将它们排序。这个比较远的距离是通过下面的计算式子得出的:
h = h * 3 + 1
这种算法的时间复杂度是 O(n^2) ~ O(n*log2n).
算法实现
'''
希尔排序
'''
def shellSort(self, array):
n = len(array)
# h用来表示比较间隔h个数的两个数比较
# 这里设置间隔为未排序序列长度的一半
# h = n // 2
h = 1
while h < n/3:
h = h*3+1
# 插入排序的方法,判断是不是最后一个比前一个小
# 如果是,则交换
while h >= 1:# 直到间隔小于1
for i in range(h, n):
j = i
while j >= h:
if array[j] < array[j-h]:
array[j], array[j-h] = array[j-h], array[j]
j -= h
# h = h//2
h= h//3
return array