二路歸併排序

2021-08-20 16:34:50 字數 884 閱讀 5642

------------二路歸併排序

思想:分治,將每乙個無序陣列分為兩個陣列,分別把這兩個陣列排序然後再合起來就是乙個有序陣列,運用了遞迴思想

最好情況:o(nlgn)

最壞情況:o(nlgn)(選出的a[0]為最大或者最小元素)

平均:o(nlgn)

空間複雜度:o(n)

穩定性:穩定排序

僅適用於順序表,可用作外部排序中

#includeusing namespace std;

int a[8] = ;

int b[8]; //需要額外等大小的陣列儲存合併結果

void hebing(int a, int x, int m, int c, int temp)

while (p1 <= m)

temp[i++] = a[p1++];

while (p2 <= c)

temp[i++] = a[p2++];

for (j = 0; j < c-x+1; j++) //放回原陣列

}void twosort(int a,int x,int c,int temp)//二路歸併:將左邊的序列twosort,再將右邊的twosort,最後將左右兩邊合併在乙個陣列

}void quicksort(int *a, int n)

{}int main()

ps:二路歸併主要是利用遞迴思想,不過注意排序下標,弄錯了遞迴程式除錯挺麻煩的

歸併排序(二路歸併)

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