(這裡參考自 狄泰 資料結構課程)
基本思想
將兩個或兩個以上的有序序列合併成乙個有序序列 意思就是
v[ 0 ] , v[ 1 ] , v[ 02] ,…v[ m ] 和 v[ m ] , v[ m+1 ] , v[ m+2] ,…v[ n-1 ]
合併 為 v[ 0 ] , v[ 1 ] , v[ 02]…v[ n-1 ]
看下圖 舉例:
直接上**:
template
<
typename t>
void sort::
merge
(t array,
int len,
bool min2max)
//對外使用介面
template
<
typename t>
void sort::
merge
(t src[
], t helper,
int begin,
int end,
bool min2max)
else
}template
<
typename t>
void sort::
merge
(t src[
], t helper,
int begin,
int mid,
int end,
bool min2max)
while
(i <= mid)
//當一邊陣列的元素個數多於另一邊,將剩餘的元素放入輔助陣列
helper[k++
]= src[i++];
while
(j <= end)
helper[k++
]= src[j++];
/* * 將排好序的陣列拷貝回 src 是因為返回上一層遞迴後再利用 src 合併
*/for(i = begin; i <= end; i++
)}
幾種排序,希爾排序,快速排序,堆排序,歸併排序
因為最近看了一點stl,所以用vector代替了陣列,從別的地方借鑑了很多,只是簡單的實現,也沒有做什麼優化,其實也不會 include include includeusing namespace std void print vectorv swap v left v high quick so...
排序 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...
排序 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...