C 實現歸併排序

2022-10-03 23:24:20 字數 982 閱讀 5750

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

簡單的來說,歸併排序主要分為三步,一是對陣列的劃分,二是對陣列的排序,三是對陣列的合併。劃分的大小是可以隨自己的想法而設定,但是一般都是以2為單位,這樣最小的一組的排序就比較方便。

具體乙個簡單的例子:

設有數列

初始狀態:6,202,100,301,38,8,1

第一次歸併後:,,,,比較次數:3;

第二次歸併後:程式設計客棧,,比較次數:4;

第三次歸併後:,比較次數:4;

總的比較次數為:3+4+4=11;

逆序數為14;

在利用演算法實現的時候,需要利用遞迴的思想,函式的入口是整個陣列,不斷進行劃分,直到劃分的陣列只剩下乙個或兩個元素為止,對這一組進行排序後,再按原來劃分的大小還原並排序,這裡利用乙個新的陣列比較方便,將兩個排序後的陣列,再從小到大乙個乙個放入新的陣列。

具體**:

#include

#include

using namespace std;

void merge(int *data,int start,int end,int *result)

return;

} else if (end == start)

return; //last one element then there is no need to sort;

else

} }//example

int main()

; int length = 17;

int result[length];

cout << "before sorted:"<

本文標題: c++實現歸併排序

本文位址:

歸併排序 C 實現

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

C 實現歸併排序

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

C 歸併排序實現

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