19 資料結構 歸併排序(筆記)

2021-10-06 15:13:06 字數 1360 閱讀 6240

歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。

將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

歸併排序,分解只有乙個元素的時候為止,乙個元素的序列是有序的。

def merge_sort(alist):

"""歸併演算法"""

n = len(alist)

if 1 == n:

return alist

mid = n // 2

#對左半部分進行歸併排序

left_sorted_li = merge_sort(alist[:mid])

#對左半部分進行歸併排序

right_sorted_li = merge_sort(alist[mid:])

#合併兩個有序集合

left, right = 0, 0

merge_sort_li =

left_n = len(left_sorted_li)

right_n = len(right_sorted_li)

while left < left_n and right < right_n:

if left_sorted_li[left] <= right_sorted_li[right]: #加了個等於號,使演算法穩定

left += 1

else:

right += 1

merge_sort_li += left_sorted_li[left:]

merge_sort_li += right_sorted_li[right:]

return merge_sort_li

alist = [54,26,93,17,77,31,44,55,20]

a=merge_sort(alist)

print('原列表',alist)

print(a)

結果

可以看出,歸併演算法並沒有改變原列表的順序,而是將排序後的結果以另乙個列表返回。

分解的每一層(共兩組)時間複雜度是o(n),然後一共分解logn 層。

資料結構 歸併排序

排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...

資料結構 歸併排序

歸併排序,即merge sort,通過遞迴式的merge操作 merge即歸併 實現排序。演算法思想是分治思想 divide and conquer 歸併排序一般是遞迴實現的 時間複雜度o nlgn 遞迴都是一去一回,去的時候divide,回的時候conquer。表達欠提煉 1 divide,分 遞...

資料結構 歸併排序!!!

歸併排序 整體思想 將資料分成很多的部分,每次排序資料的一部分,然後將兩部分的資料進行整體排序,這樣一步一步將整體資料排序。如圖 注 將需要排序的資料進行分塊,當每個塊的資料足夠的少的時候就可以進行效率高的排序方法,當兩塊資料排序好的時候就可以將兩塊排序好的資料進行合併。具體實現方法 ifndef ...