幾種排序分享 歸併排序

2021-09-29 17:01:03 字數 1125 閱讀 5558

(這裡參考自 狄泰 資料結構課程)

基本思想

將兩個或兩個以上的有序序列合併成乙個有序序列 意思就是

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.演算法基本思路 設兩個有序的子檔...