歸併排序(merge sort):是建立在歸併並操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。
作為一種典型的分而治之思想的演算法應用,歸併排序的實現由兩種方法:
自上而下的遞迴歸(所有遞迴的方法都可以用重組重寫,所以就有了第2種方法);
自下而上的繼承;
演算法思路:
1,申請空間,調整大小為兩個已經排序序列之和,該空間放置存放合併後的序列;
2,設定兩個指標,最初位置分別為兩個已經排序序列的起始位置;
3,比較兩個指標所指向的元素,選擇相對小的元素放入合併空間,並移動指標到下一位置;
4,重複步驟3直到直到指標指標達到序列尾;
5,將另一串行剩下的所有元素直接複製到合併序列尾。
**演示:
c#**實現:
1實現結果:public
static
void guibing(int a, int first, int last, int
temp)210
}1112public
static
void sort(int a, int first, int mid, int last, int
temp)
1326
else
3031}32
33//
當一部分新增完成之後,另一部分按順序進入陣列
34while (i <=m)
3839
while (j <=n)
4344
for (i = 0; i < k; i++)
45 49}
5051
static
void main(string
args) ;
54int b = arr.length - 1, a = 0;55
int temp = new
int[arr.length];//
臨時陣列,長度和arr相同
56guibing(arr, a, b, temp);
57for (int q = 0; q < arr.length; q++)
5861 }
、**於:
常見的排序演算法(四) 歸併排序
歸併排序 英語 merge sort,或mergesort 是建立在歸併操作上的一種有效的排序演算法,效率為o n log n 和快速排序一樣,該演算法是採用分而治之 divide and conquer 的思想,也是乙個非常典型的應用,且各層分治遞迴可以同時進行。採用分治法 歸併操作 merge ...
C 演算法 歸併排序
編譯環境 c 11 實現如下 include std declval typedef unsigned long size type templateconstexpr size type distance const tp 1,const tp 2 templatestruct comparato...
常見排序演算法總結 3 歸併排序
3 歸併排序 將陣列不斷拆分,拆分為多個只包含單個元素的陣列。再將陣列不斷有序合併,合併為乙個有序的陣列。遞迴 合併簡稱歸併,合併都能理解,那什麼是遞迴呢,遞迴其實就是在一次大規模運算中,其中的一步或幾步計算用到了前面的運算結果,舉個例子 第一天給你一塊錢,第二天給你兩塊錢,第三天四塊,以此類推每天...