分治思想就是先分成一小塊一小塊,最後再一步步合併起來,最後完成排序
下面**需要注意的地方是:int asize=arr.size();
我一開始的時候直接在for迴圈中使用arr.size()
但是我這個for迴圈中arr是在不斷pop的,所以導致其size也在不斷變化,不能達到對半分的效果,用乙個變數來把最初始的size記錄下來後,得到的結果就正常了
#include#include#includeusing namespace std;
int mark=0;
void mymerge(queue&arr)
queuearr1;
queuearr2;
int asize=arr.size();
for(int i=0;iq;
int n=8;
for(int i=0;i>x;
q.push(x);
} mymerge(q);
for(int i=0;i}
歸併排序演算法 分治 雙遞迴
歸併排序運用分治演算法與遞迴思想,那麼其雙遞迴究竟是怎樣的呢?今天被困擾了一會一直覺得並沒有完全理解,後通過思考以及查閱資料,弄懂了其遞迴的真正實現過程!寫給已了解歸併排序的coder code void merge int r,int r1,int s,int m,int t 歸併子串行 whil...
遞迴與分治 歸併排序
描述 給定乙個數列,用歸併排序演算法把它排成公升序。輸入 第一行是乙個整數n n不大於10000 表示要排序的數的個數 下面一行是用空格隔開的n個整數。輸出 輸出排序後的數列,每個數字佔一行。輸入樣例 5 3 2 1 4 5 輸出樣例 1 2345 基本思路 歸併排序是將一組無序的數列,先一分為二,...
分治演算法 歸併排序
問題描述 輸入 待排序列r n 待排區間 s,t 輸出 公升序序列r s r t 分析 1 劃分 2 求解子問題 3 合併 歸併排序首先執行劃分過程,直到子串行長度為1,再在回溯的過程中排序。在merge 函式中,由於回溯回來的兩個子串行已經有序,所以只需依次取出兩者中最小值中的較小者即可。incl...