合併排序merge sort

2021-08-20 07:27:40 字數 1197 閱讀 2077

合併排序演算法是用分而治之的策略實現對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.解決 用分治排序法對兩個子串行遞迴地排序 ...