
体操
1. 将待排序数组分成若干个子序列(由增量序列 GAP 来确定),并对每个子序列进行插入排序。
2. 不断缩小增量 GAP(通常使用 GAP = GAP / 2),重复第 1 步操作,直到 GAP 等于 1。

GAP
下面是 Python 代码实现:
Python
def shell_sort(arr):
n = len(arr)
GAP = n // 2 # 初始增量
# 不断缩小增量,直到增量为 1
while GAP > 0:
# 对每个子序列进行插入排序
for i in range(GAP, n):
j = i
while j >= GAP and arr[j-GAP] > arr[j]:
arr[j-GAP], arr[j] = arr[j], arr[j-GAP]
j -= GAP
GAP //= 2
# 进行一次普通插入排序
for i in range(1, n):
j = i
while j > 0 and arr[j-1] > arr[j]:
arr[j-1], arr[j] = arr[j], arr[j-1]
j -= 1
return arr
在最坏情况下,希尔排序的时间复杂度为 O(n²),但通常情况下效率比插入排序高,且空间复杂度为 O(1)。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号