Python3
实现希尔排序
排序原理:
- 选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组;
- 对分好组的每一组数据完成插入排序;
- 减小增长量,最小减为1,重复第二步操作。
代码实现:
def shell_sort(shell_list):
n = len(shell_list)
gap = n // 2
while gap > 0:
for i in range(gap, n):
j = i
while j > 0:
if shell_list[j-gap] > shell_list[j]:
shell_list[j-gap], shell_list[j] = shell_list[j], shell_list[j-gap]
j -= gap
else:
break
gap //= 2
return shell_list
if __name__ == '__main__':
test_list = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(shell_sort(test_list))
# Hibbard增量序列
# Dk = 2^k - 1 相邻元素互质
# 最坏时间复杂度:T = O(N ^ 3/2)
时间复杂度分析:
希尔排序算法的时间复杂度和步长的选取有关,平均时间复杂度为O(nlog2n)
,最坏为O(n²)
,最好为O(n)
。