歸併(即merge函式)
二路歸併排序舉例:分為有序子表a,有序子表b。a中首個元素與b中首個元素比較;若a1小於b1,取出a1,比較a2與b1;若a1大於b1,取出b1,比較a1與b2。依次類推。
遞迴(即mergesort函式)
分解問題
#include
#include
//對應malloc函式與free函式的使用
void
disp
(int a,
int n)
void
merge
(int a,
int low,
int mid,
int high)
//核心
else
}while
(i<=mid)
//使左側的剩餘複製下來
while
(j<=high)
//使右側的剩餘複製下來
for(k=
0,i=low;i<=high;k++
,i++
)//將資料從臨時儲存放入陣列a
a[i]
=tmpa[k]
;free
(tmpa);}
void
mergesort
(int a,
int low,
int high)
//遞迴呼叫
}void
main()
自頂向下的原地歸併排序
歸併排序是一種簡單的遞迴排序演算法。思路 歸併排序即是將兩個有序的陣列歸併成乙個更大的有序陣列。那麼我們要將乙個陣列排序,我們可以先將這個陣列分成兩半分別排序,然後將結果歸併起來。其 歸併排序的速度非常快,但是卻需要額外的空間。為什麼需要額外的空間尼?因為我們使用歸併排序時是將兩個不同的有序陣列歸併...
演算法 歸併排序(自頂向下 自底向上)
思路 實現 兩種實現方式 自頂向下和自底向上 實現 自頂向下 mergesort.h 1 include 2 include 3 include insertionsort.h 4 5using namespace std 67 template8 將arr l.mid 和arr mid 1.r 兩...
自頂向下和自底向上的歸併排序區別
歸併排序中最基本的操作是 歸併 即將兩個 2 路歸併 或兩個以上的有序陣列組合成乙個更大的有序陣列。按照歸併順序的不同,歸併排序可以分為自頂向下和自底向上兩類。自頂向下的歸併排序進行的操作主要就是對陣列的拆分與合併。通過層層拆分得到單元素陣列,天生有序,然後歸併兩個單元素陣列得到乙個較大的有序陣列,...