排序演算法之歸併排序

2022-07-05 04:42:10 字數 896 閱讀 6106

歸併的含義是將兩個或兩個以上的有序表組合成乙個新的有序表。

假定待排序表中含有n個記錄,則可以看成是n個有序的字表,每個表的長度為1,然後兩兩歸併,得到[n/2]個長度為2或1的有序表;再兩兩歸併,......如此重複,直到合併成乙個長度為n的有序表為止,這種方法稱為2-路歸併排序。

(**)

演算法實現:

1 #include2

using

namespace

std;34

//構建乙個輔助陣列b

5int *b = (int*)malloc((8+1)*sizeof(int

));6

//兩段有序表a[low...mid],a[mid+1...high]放在同一順序表中相鄰的位置上

7void merge(int a,int low,int mid, int

high)820

//如果其中乙個表檢測完畢,將另一端的剩餘部分直接複製到a中,下面兩個while只會執行乙個

21while(i<=mid) a[k++]=b[i++];

22while(j<=high) a[k++]=b[j++];23}

24//

歸併排序的實現是基於分治的。

25void mergesort(int a,int low,int

high)

263536}

37void

main()38;

40 mergesort(a,0,7

);41

for(int i=0;i<8;i++)

4245 }

演算法分析:

平均時間複雜度:o(nlog2n)

空間複雜度:o(n)  (用於儲存有序子串行合併後有序序列)

穩定性:穩定

排序演算法之歸併排序

歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...

排序演算法之歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。歸併排序基本原理 通過對若干個有序結點序列的歸併來實現排序。所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。歸併排序基本思...

排序演算法之歸併排序

歸併排序,和快排一樣同樣採用了分治的思想,將兩個 或以上 有序表合併成乙個新的有序表。歸併排序步驟如下 把n個記錄看成 n個長度為 1 的有序子表 進行兩兩歸併使記錄關鍵字有序,得到 n 2 個長度為 2 的有序子表 重複第2步直到所有記錄歸併成乙個長度為n的有序表為止。下面是歸併排序演算法的遞迴實...