排序和搜尋(八) 歸併排序的python實現

2021-08-16 23:35:46 字數 709 閱讀 7784

【基本原理】

歸併排序是一種遞迴演算法,不斷將列表拆分為一半。 如果列表為空或有乙個項,則按進行排序。如果列表有多個項,我們分割列表,並遞迴呼叫兩個半部分的合併排序。 一旦對這兩半排序完成,就執行稱為合併的基本操作。合併是獲取兩個較小的排序列表並將它們組合成單個排序的新列表的過程。

【分析】

一分為二的過程:類似於二分查詢,時間複雜度為o(logn)

合併過程:大小為 n 的列表的合併操作需要 n 個操作。

歸併排序是一種 o(nlogn) 演算法。

【**】

#合併排序,遞迴將列表一分為二,直至不可再分;從下到上,比較,合併

def mergesort(alist):

print('當前列表為',alist)

if len(alist)>1:

#取中間值

mid=len(alist)//2

#中間值的左半邊,mid處取不到

lefhalf=alist[:mid]

# 中間值的右半邊

righthalf=alist[mid:]

#遞迴呼叫

mergesort(lefhalf)

mergesort(righthalf)

#設定左半邊、右半邊以及整個列表的索引

i=0j=0

k=0while i【結果】

排序 歸併排序和快速排序

1,歸併排序的基本思想 1,將兩個或兩個以上的有序序列合併成乙個新的有序序列,比如有序序列 v 0 v m 和 v m 1 v n 1 合併為 v 0 v n 1 這種歸併方法稱為 2 路歸併 1,必須大於 1 個有序序列 2,必須有序 2,歸併的套路 1,將 3 個有序序列歸併為乙個新的有序序列,...

歸併排序和希爾排序

一 歸併排序 歸併排序的時間複雜度為o nlogn 這是該演算法中最好 最壞和平均的時間效能。其中比較操作的次數介於 nlogn 2和nlogn n 1 在每次歸併中比較次數不一樣 賦值操作的次數是 2nlogn 歸併演算法的空間複雜度為 0 n 歸併排序比較占用記憶體,但卻是一種效率高且穩定的演算...

歸併排序和堆排序

歸併排序的演算法我們通常用遞迴實現,先把待排序區間 s,t 以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間 s,t 桶排序法,非常耗空間。規定陣列中元素的最大值不超過陣列的長度,否則要先求出陣列元素的最大值後,才能指定空桶的個數,要求待排序陣...