二路歸併排序

2021-07-10 16:29:00 字數 641 閱讀 3283

不是困難的演算法,不過也是練習了下遞迴。

#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 end)

else

}else

}while(j<=end)

memcpy(a+begin,b+begin,(end-begin+1)*sizeof(int));//賦值給yuan陣列

}int main()

mergesort(a,b,0,n-1);

for(int i=0;i

因為t(n)=2t(n/2)+n

2t(n/2)指2個子問題,n是合併操作的複雜度,i,j遍歷了整個陣列長度,因此,時間複雜度nlog2n

ps: 遞迴問題的複雜度求解可使用擴充套件法求解。特別地,

如果形式上滿足t(n)=at(n/b)+cn^k。

當a=b^k時 複雜度為n^k * logb n //所以歸併排序可得為n * log2n的複雜度

當a>b^k時 複雜度為n^k 當a

歸併排序(二路歸併)

歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為n nn個一元組,兩兩合併得到二元組,以此類推共合併log 2n log 2n log2 n 次後,陣列變得有序。時間複雜度為o n logn o nlogn o nlog n 編譯環境de...

二路歸併排序

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

二路歸併排序

將兩個按值有序序列合併成乙個按值有序序列,則稱之為二路歸併排序,下面有自底向上和自頂向下的兩種排序演算法,自頂向下的排序在本文末講述,使用遞迴實現,較簡潔,經供參考。1.歸併子演算法 把位置相鄰的兩個按值有序序列合併成乙個按值有序序列。例如把序列 x s.u 和 序列 x u 1.v 合併成序列 z...