希爾排序算法
希爾排序算法
希爾排序算法是在插入排序的基礎上進行的改進,比插入排序更高效,是插入排序的一種,又叫‘縮小增量排序’。
希爾排序是把數組按下標的一定增量分組,對每組使用直接插入排序算法排序;
隨着增量逐漸減少,每組包含的元素越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止
對比插入排序
希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數很少,速度很快;當元素基本有序了,步長很小,插入排序對於有序的序列效率很高
增量:兩個元素之間的下標差
圖解
相同顏色的元素爲一組,圖中的跨度即爲增量,
代碼實現
python2.7.5
# _*_ encoding:utf-8 _*_
# 希爾排序算法
def shell_sort(lists):
step = len(lists) // 2 # 增量:兩個元素之間的下標差
while step >= 1: # 增量大於等於1,爲0時,算法結束
for i in range(0,step): # 按照增量分組的數量,增量長度即爲分組數量
# i爲每組元素的起始元素的下標
# 下面就是插入排序的實現
for index in range(i+step,len(lists),step): # 每組增量數據的下標,從第二個元素開始
for j in range(index,0,-step):
if lists[j] < lists[j - step]:
lists[j], lists[j - step] = lists[j - step], lists[j]
else:
break
step //= 2
return lists
lt = [3,5,10,6,2,9,4]
print shell_sort(lt)
結果
文章中有不足之處請多多指教,歡迎討論,共同學習,共同進步
參考:
https://blog.csdn.net/qq_39207948/article/details/80006224