原理:
- 設(shè)置步長進(jìn)行分組
- 后一組與前一組進(jìn)行對位比較交換
- 逐漸縮減步長直至比較完成
- 有時候理解起來比較抽象嚼黔,建議手寫一次會好理解很多
代碼實現(xiàn)
import math
#希爾排序
def shell_sort(num_list):
#設(shè)置初始步長属韧,步長為長度的一半域醇,分為兩組
step = math.floor(len(num_list)/2)
while step > 0:
#依次取出第二組至最后一組的數(shù)字
for i in range(step,len(num_list)):
#從第二組開始與前一組進(jìn)行比較,對應(yīng)位置的數(shù)據(jù)颊亮,如果大小顛倒則交換位置
while i >= step and num_list[i] < num_list[i - step]:
num_list[i],num_list[i - step] = num_list[i - step],num_list[i]
i -= step
#重新設(shè)置步長
step = math.floor(step/2)
return num_list
if __name__ == '__main__':
num_list = [1,4,6,7,9,3]
result = shell_sort(num_list)
print(result) #[1, 3, 4, 6, 7, 9]