歸併排序(二路歸併)

2021-09-29 13:11:49 字數 924 閱讀 9433

歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個(二路歸併為兩個)有序陣列形成新的有序表。

思路:將陣列分為n

nn個一元組,兩兩合併得到二元組,以此類推共合併log

2n

log_2n

log2​n

次後,陣列變得有序。時間複雜度為o(n

logn

)o(nlogn)

o(nlog

n)。

//編譯環境dev-c++5.11

//歸併排序

#include

using

namespace std;

int a=

;int len=8;

void

merge2

(int

*a,int low,

int mid,

int high)

;void

merge2_sort

(int

*a,int low,

int high)

;int

main()

void

merge2

(int

*a,int low,

int mid,

int high)

else

}while

(i<=mid)

while

(j<=high)

for(

int k=

0,i=low;i<=high;k++

,i++

) a[i]

=b[k];}

//二路歸併排序(遞迴)

void

merge2_sort

(int

*a,int low,

int high)

排序 歸併排序(二路歸併)

基本思想 將兩個有序表合併成乙個有序表。將下列兩個已排序的順序表合併成乙個已排序表。順序比較兩 者的相應元素,小者移入另一表中,反覆如此,直至其中任一表都移入另 一表為止。二路歸併排序的基本思想是將兩個有序表合併成乙個有序表。給定排序碼46,55,13,42,94,05,17,70,二路歸併排序過程...

二路歸併排序

不是困難的演算法,不過也是練習了下遞迴。include include include using namespace std const int maxn 100 5 int a maxn int b maxn void mergesort int a,int b,int begin,int en...

二路歸併排序

二路歸併排序是將兩個有序表合併成乙個有序表的排序方法。其基本思想為 序列中有 n個記錄,可以看作為 n個有序子串行,每個序列長度為 1。首先將每相鄰的兩個記錄合併,得到 n 2 個較大的有序子串行,每個序列長度為 2。再將上述子串行兩兩合併,得到 n 2 2 個有序子串行,直至得到乙個長度為 n的有...