二路歸併排序的思想:一次排序過程,將已經各自有序的兩個段的資料合併乙個段,並且合併後依舊有序。第一次我們認為單個資料是有序的,乙個資料就是乙個段,一次排序後,兩個資料就是乙個有序資料段,這樣下一次每個有序資料段就是兩個資料。最後將其合併成乙個完成有序段,則整個資料就已經排序好了。
#include
#include
#include
void
meger
(int
*arr,
int len,
int width,
int*brr)
//只剩下乙個歸併段資料
while
(low1<=high1) brr[index++
]=arr[low1++];
while
(low2<=high2) brr[index++
]=arr[low2++];
low1=high2+1;
high1=low1+width-1;
low2=high1+1;
high2=low2+width>len?len-
1:low2+width-1;
}//處理只剩下乙個歸併段的情況
while
(low1]=arr[low1++];
//將brr中的資料全部複製到arr中
for(
int i=
0;i) arr[i]
=brr[i];}
void
megersort
(int
*arr,
int len)
free
(brr)
;}
歸併排序(二路歸併)
歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為n nn個一元組,兩兩合併得到二元組,以此類推共合併log 2n log 2n log2 n 次後,陣列變得有序。時間複雜度為o n logn o nlogn o nlog n 編譯環境de...
二路歸併排序
不是困難的演算法,不過也是練習了下遞迴。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的有...