歸併排序的C 實現

2021-07-04 15:24:19 字數 658 閱讀 6571

歸併排序是一種穩定排序演算法,它的時間複雜度與快排一樣都是o(n(logn))。歸併排序的基本思路是:對於兩個已經排好序的陣列,將它們合併成乙個有序陣列是比較容易的;所以可以利用遞迴地思路,將乙個陣列分成兩個子陣列,再對這兩個子陣列進行分解,直到每個子陣列都是有序的(最極限的情況就是每個子陣列都只有乙個元素),再將這些有序的子陣列進行合併,最終可以得到乙個有序的長陣列。

下面是一段**:

#include using namespace std;

void merge(int a , int first , int mid , int last , int t)

else

}while(i <= m)

while(j <= n)

for(int i = 0 ; i < k ; ++i) }

void mergesort(int a , int first , int last ,int t)

}int main()

; int *b = new int[sizeof(a)/sizeof(a[0])];

cout執行結果如圖所示:

歸併排序 C 實現

歸併排序跟快速排序一樣,也是基於 分治法 歸併排序與快速排序的區別 快速排序是先 分治 成兩個子串行,然後呼叫本身繼續遞迴進行 分治 歸併排序是先遞迴地分成子串行,然後按演算法合併。歸併排序是先遞迴地把待排序序列分成若干子串行,直到最後分成乙個乙個元素為子串行,然後對些子串行中每個元素,依照其大小合...

C 實現歸併排序

歸併 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。演算法描...

C 歸併排序實現

基本過程 採用分治的核心思想,把乙個複雜問題拆成若干子問題求解。通過遞迴的方法,不斷對左右兩部分進行拆分 比較左右兩部分大小,不斷將左右兩部分按順序合併 實現 include include using namespace std void merge vector int nums,int low...