思路
實現
兩種實現方式:自頂向下和自底向上
實現
自頂向下
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 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。分解 將...