步驟
-
將數據分成d = n//2 組,每一趟希爾排序從元素d開始,採用直接插排。
-
每個元素的比較和插入均在同一組內進行。
-
更新d = d//2 。
-
直到d=0時停止,當d=1時,相當於對近乎有序的結果進行一次完整的直接插排。
圖解
複雜度
- 時間複雜度:
- 最好的情況,時間複雜度。
- 最差的情況,時間複雜度。
- 平均的情況,時間複雜度。
- 空間複雜度:
算法
def ShellSort(List):
d = n//2
while d>0:
for i in range(d,len(List)):
cur = List[i]
pos = i-d
while pos >= 0 and List[pos] > cur:
List[pos+d] = List[pos]
pos -= d
List[pos+d] = cur
d = d//2
return List