演算法 歸併排序(自頂向下 自底向上)

2022-06-02 05:48:07 字數 1032 閱讀 7459

思路

實現

兩種實現方式:自頂向下和自底向上

實現

自頂向下

mergesort.h

1 #include 2 #include 3 #include "

insertionsort.h"4

5using

namespace

std;

67 template8

//將arr[l...mid]和arr[mid+1...r]兩部分進行歸併

9void __merge(t arr , int l, int mid, int

r)22

//如果右半部分已處理完畢

23else

if( j >r)

27//

左半部分所指元素 < 右半部分所指元素

28else

if( aux[i-l] < aux[j-l] )

32//

左半部分所指元素 >= 右半部分所指元素

33else37}

38}3940

//遞迴使用歸併排序,對arr[l...r]的範圍進行排序

41 template42

void __mergesort(t arr , int l, int

r) 54

55 template56

void mergesort(t arr , int

n)

自底向上

1

//自底向上歸併,可對鍊錶排序

2 template3

void mergesortbu(t arr, int

n)

應用優化總結

自頂向下和自底向上的歸併排序區別

歸併排序中最基本的操作是 歸併 即將兩個 2 路歸併 或兩個以上的有序陣列組合成乙個更大的有序陣列。按照歸併順序的不同,歸併排序可以分為自頂向下和自底向上兩類。自頂向下的歸併排序進行的操作主要就是對陣列的拆分與合併。通過層層拆分得到單元素陣列,天生有序,然後歸併兩個單元素陣列得到乙個較大的有序陣列,...

自底向上和自頂向下

動態規劃的式子都是狀態p由狀態q1 q2 q3 之中選擇乙個或幾個計算出來的形式,但是如果一直是一些狀態這樣遞迴下去,最後會無限迴圈的,所以每個式子一直寫下去最後都會得到一些狀態p是常數 遞迴邊界 的形式。以上可構造乙個dag 自底向上就是已經知道了所有遞迴邊界,把所有可能的狀態都算出來。基本步驟是...

歸併排序 自底向上的歸併排序演算法

歸併排序 merge sort 是建立在歸併操作上的一種有效,穩定的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。分解 將...