合併排序演算法是用分而治之的策略實現對n個進行排序。
合併排序的基本思想:將需要排序的元素分成數量大概相等的2個子集合,分別給2個子集合進行排序,最終將2個排序好序的子集合合併成乙個集合。
現比如有集合:
分而治之:
首先先將元素分成大概數量相等的2個子集合,下面就是「分」的過程:
看上面的,可以深度為log2(n) = 4。
當分到最後只能乙個元素時,則將兩兩子集合合併成乙個集合,下面就是「治」的過程:
以下面這兩個子集合作為例子,作為「治」的例子。
a[0] <= b[0],則將a[0]移到陣列:
a的索引變為1。
a[1] > b[0],則將b[0]移到陣列:
b的索引變為1。
a[1] <= b[1],則將a[1]移到陣列:
a的索引變為2。
a[2] > b[1],則將b[1]移到陣列:
b的索引變為2。
int b已經迴圈完了,則將int a的元素移到陣列:
最後治到最後結果為:[1,2,3,5,10]
...通過迴圈的「治」過程,最後得到排序的結果:[1,2,3,4,5,5,10,11,33]
合併排序的時間複雜度o(nlog2(n))
合併(歸併)排序 MergeSort
用來計數,測試執行迴圈次數.int count private void button1 click object sender,eventargs e count 0 int theb thea.toarray mergesort theb,0,n 1 private void mergesort...
歸併排序 合併排序(merge sort)詳解
前提 1.待排序的子串行相對有序。2.不考慮大資料等特殊情況。includeusing namespace std void merge sort int a,int p,int r void merge int a,int p,int q,int r int b 20 int main int l...
演算法之合併排序 mergeSort
合併排序演算法在結構上是遞迴的,採用分治策略 就是將原有的問題劃分為 n 個規模較小但結構與原問題相似的子問題,遞迴地解決這些子問題,然後合併其結果,就得到原問題的解。合併排序的模式一般如下 1.分解 將 n 個元素分解為各含 n 2 個元素的兩個序列 2.解決 用分治排序法對兩個子串行遞迴地排序 ...