分治演算法 歸併排序

2021-10-21 17:55:09 字數 904 閱讀 9872

/*歸併排序使用分治演算法

先將待排序陣列一分為二,再分為四,再分為八...

直到不可再分,然後逐漸的有序排序,每兩個子串行之間合併排序

特點:穩定,能夠最大限度的按照輸入的順序排列

*/#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...