C 實現歸併排序

2021-09-11 06:49:35 字數 992 閱讀 2865

歸併

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

演算法描述

歸併操作的工作原理如下:

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列

設定兩個指標,最初位置分別為兩個已經排序序列的起始位置

比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置

重複步驟3直到某一指標超出序列尾

將另一串行剩下的所有元素直接複製到合併序列尾 圖示

//比較相鄰序列

void merge(int arr,int temp,int start,int mid,int end)

//將多餘的數放到序列末尾

while(i != mid+1)

temp[k++] = arr[i++];

while(j != end+1)

temp[k++] = arr[j++];

//更新序列

for(i = start;i <= end;i++)

arr[i] = temp[i];

}void mergesort(int arr,int temp,int start,int end)

}int main();

int i, b[8];

mergesort(a, b, 0, 7);

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

cout<

return 0;

}

歸併排序 C 實現

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

C 歸併排序實現

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

歸併排序C 實現

基於分治法,利用歸併操作,將兩個有序序列合併成乙個有序序列,將當前子串行分為兩個子串行,遞迴地,使兩個子串行有序,遞迴到只有乙個元素的子串行,合併兩個子串行,得到乙個兩個元素的有序子串行,再次合併得到乙個含有四個元素的有序子串行,直到合併的序列為整個序列 void merge vector int ...