python 希爾排序

2021-09-25 22:42:05 字數 904 閱讀 9253

python實現

希爾排序是對直接插入排序的改善,由於在最好的情況下(原序列接近有序的情況),直接插入排序的時間複雜度是o(n),因此希爾排序試圖通過將原待排序序列分解為更小的序列,對每個子串行先進行插入排序,這將使整個原始序列更加趨於有序狀態,從而使得對整體序列進行插入排序時變得高效。

首先設定元素間隔gap,通常是len(lists)//2,其中lists是待排序序列,//是地板除法,以長度為10的序列lists=[6,8,9,52,8,666,0,1,5,8]為例:

gap=len(lists)//2=5

因此,lists將被分為5組,分別為[6,666],[8,0],[9,1],[52,5],[8,8]

接下來是分別對以上5組進行直接插入排序

排序完畢,合併成長度為10的序列是[6,0,1,5,8,666,8,9,52,8]

至此,gap=5時的排序結束

接下來,gap=gap//2=2,重複以上步驟,直至gap=1,此時對整體序列進行插入排序即可

#希爾排序:

def shell_sort(lists):

gap=len(lists)//2

while gap>=1:

for i in range(gap,len(lists)):

key=lists[i]

j=i-gap

while j>=0:

if lists[j]>key:

lists[j+gap]=lists[j]

lists[j]=key

j-=gap

gap//=2

lists=[1,5,6,9,8,2,6,52,1314,8,0,520,888,666]

shell_sort(lists)

print(lists)

Python 希爾排序

coding utf 8 希爾排序 def shellsort list list 4,1,9,13,34,26,10,7,4,3 m len list 元素數目 gap m 2 gap 5,2,1.while gap 0 print gap 列表中的list i 按間隔gap從列表中取元素list...

Python 希爾排序

希爾排序也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本,希爾排序的核心思想是 先將陣列分割成若干個子串行,分別進行直接插入排序,然後一次縮減增量再進行排序,直至增量為零,然後對全體進行一次直接插入排序。增量也叫分組步長,第一次為len array 2 第二次為 len array 2 ...

Python 希爾排序

希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好的理解這演算法,演算法本身還是使用陣列進行排序。例如,假設有這樣一組數 13,14,94,33,82,25,59,94,65,23,45,27,73,...