二路歸併排序

2021-10-02 13:54:06 字數 1048 閱讀 9225

歸併排序是建立在歸併操作的一種有效的排序演算法,將兩個順序序列合併成乙個順序序列的方法,稱為二路歸併。一種穩定的排序方法。

**如下:

#include

#include

#include

#define length 13

void

showdata

(int arr)

printf

("\n");

}void

meger

(int arr,

int len ,

int width)

//一次歸併過程

else

}//剩餘乙個歸併段有資料

while

(low1<=high1 )

//前乙個歸併段有資料 相當於乙個if判斷

while

(low2<=high2)

//後乙個歸併段有資料

low1=high2 +1;

//下乙個歸併段的起始位置

high1=low1+width>len?len-

1:low1+width-1;

low2=high1+1;

high2=low2+width>len?len-

1:low2+width-1;

}while

(low1//只剩乙個歸併段

for(

int i=

0;i++i)

free

(brr);}

void

megersort

(int arr,

int len)

//時間複雜度為n*log n 穩定

}int

main()

;for

(int i=

0;i++i)

showdata

(arr)

; megersort (arr,length)

; showdata (arr)

;return0;

}

歸併排序(二路歸併)

歸併排序是一種遞迴思想的體現,通過多次合併較小的幾個 二路歸併為兩個 有序陣列形成新的有序表。思路 將陣列分為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的有...