參考:
希爾排序是乙個基於插入排序的改進型插入排序演算法。
由於插入排序一次只能交換相鄰的元素,因此元素只能一點點的從陣列的一端移動到另一端。如果最小的元素在陣列的末尾的話,那就需要n-1次移動,因此對於插入排序的效率是非常低的。
希爾排序的基本思想:
先取乙個小於n的整數d1作為第乙個增量,把資料的全部記錄分組,所有距離為d1的記錄放在同乙個組中。先在各組內進行直接插入排序,然後,取第二個增量d2def
shell_sorted
(s):
iflen
(s)<2:
return
gap =
len(s)//2
while gap >0:
for i in
range
(len
(s))
:if i + gap <
len(s)
: temp = s[i]
if s[i + gap]
< temp:
s[i]
, s[i + gap]
= s[i + gap]
, s[i]
gap //=
2s1 =[9
,1,2
,5,7
,4,8
,6,3
,5]print
(f'排序前:'
)shell_sorted(s1)
(f'排序後:'
)結果
演算法複雜度
希爾排序 Python實現
基本思想 希爾排序 def shell insert sort a,dk n len a for k in range dk 間距取dk,一共可以組成dk個子序列 for i in range k dk,n,dk 第0,dk,2dk.為一組 temp a i 記錄待插入的元素值 j i dk 子串行...
希爾排序Python實現
python 實現 希爾排序,希爾排序其實 就是 插入排序的改進版吧,希爾排序的步長選擇都是從d len 2開始,每次再減半,直到最後為1,當變為1的時候 可以認為就是簡單的插入排序。這種縮小步長的好處,非常簡單,彌補了插入排序的缺點,盡可能減少數字的移動次數。希爾思想是這樣 區域性看起來有序,然後...
希爾排序 python實現
希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 param alist ...