基本排序演算法之4 歸併排序mergesort

2022-03-22 00:09:09 字數 605 閱讀 9250

歸併排序理論上時間複雜度只有o(nlogn),但是其中存在過多臨時記憶體分配和copy操作而不適用於記憶體排序,卻是外部排序的基本思路。下面是我的實現:

#include#include#includeusing namespace std;

int g=0;

/*a,b is input array

* c is output array

* size of c is na+nb

*/templatevoid merge(t a,int na,t b,int nb,t c)

templatevoid show(t a,int n)

{ for(int i=0;i一些注意要點:

1.歸併排序是歸併演算法的乙個應用,所以要先實現歸併演算法,排序的時候先遞迴後操作。(如果遞迴演算法是在第一層處理資料然後處理分支資料就是【先操作後遞迴】,如果是先分支從最後的分支開始處理資料向第一層合併,就是【先遞迴後操作】)。

2.盡量不要遞迴申請記憶體,那樣會申請大量臨時記憶體,這些記憶體的資料要儲存又要大量的copy操作。

3.使用鍊錶排序就不用臨時分配記憶體也不用頻繁copy。

4.迴圈巢狀的邏輯一次不一定寫正確,先用while巢狀,邏輯更清晰。

排序演算法(4) 歸併排序

簡介 歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。一 主要步驟 將待排序陣列 0....

4 歸併排序演算法

1 歸併排序 merge sort 基本思想 歸併排序法是將兩個或兩個以上的有序表合併成乙個新的有序表 即將待排序的序列分成若干個子串行,每個子串行是有序的,然後再把有序子串行合併為整體子串行 利用歸併的思想實現二路歸併排序的實現步驟 首先將整個資料表看成是n個有序子表,每個子表長度為1 當然有序啦...

基本演算法 歸併排序

歸併排序 是一種較穩定的排序演算法 時間複雜度 nlogn 基本思想 將乙個陣列進行拆分成兩兩一組,然後分別對每組進行排序組合。基本演算法 將有二個有序數列a first.mid 和a mid.last 合併。void mergearray int a,int first,int mid,int l...