/*歸併排序使用分治演算法
先將待排序陣列一分為二,再分為四,再分為八...
直到不可再分,然後逐漸的有序排序,每兩個子串行之間合併排序
特點:穩定,能夠最大限度的按照輸入的順序排列
*/#include
using
namespace std;
void
mergearray
(int s,
int begin,
int end,
int mid)
//當乙個子串行排完之後,可能另乙個子串行還有剩下的未進行比較
//但是這時候不需要比較了,直接放後面就行了
while
(i<=mid) temp[k++
]= s[i++];
while
(j<=end) temp[k++
]= s[j++];
//再將已經排序好的temp重新放到s陣列裡面
for(
int i = begin,k =
0;i<=end;i++
,k++
)//釋放空間
delete
temp;
}void
mergesort
(int s,
int begin,
int end)
main()
;int n =
sizeof
(s)/
sizeof
(int);
mergesort
(s,0
,n-1);
for(
int i =
0;i1;i++
) cout<
}
分治演算法 歸併排序
問題描述 輸入 待排序列r n 待排區間 s,t 輸出 公升序序列r s r t 分析 1 劃分 2 求解子問題 3 合併 歸併排序首先執行劃分過程,直到子串行長度為1,再在回溯的過程中排序。在merge 函式中,由於回溯回來的兩個子串行已經有序,所以只需依次取出兩者中最小值中的較小者即可。incl...
merge sort (歸併排序) 分治演算法
1 將乙個序列分成很多個子序列,將各個子串行分別排序後再將子串行合併 歸併排序 將乙個序列分成很多個子序列,分別將子串行進行排序,然後再將子串行合併 include include includeusing namespace std 將子串行a first mid a mid,last 合併 vo...
分治演算法二 歸併排序
目錄 1 將原始序列拆分成兩個序列 分解過程 2 針對拆分後的序列,利用歸併演算法遞迴處理,進一步拆分,直到不能拆分為止,即僅乙個元素 最小問題,治理 3 利用合併兩個有序序列方法,將 2 中的最小問題逐個組合,最終組合成問題的解 合併 4 整個過程,是真的在分解整個序列,完美地體現了分治思想。me...