二路歸併排序(也叫合併排序)

2022-03-29 13:37:06 字數 1362 閱讀 4976

下面這圖展示了二路歸併的過程

二路歸併的核心**是merge()函式

它將2個分割的陣列有序的合併在一起

如圖:在陣列a中,

從p到q是乙個陣列,從q到r是另外乙個陣列

那麼如何將這2個陣列有序的合併在一起,組個新的陣列a呢?

步驟:第一步:開闢乙個陣列l,存放p到q之間(也就是需要歸併的左邊陣列)的元素

第二部:開闢乙個陣列r,存放q到r之間(也就是需要歸併的右邊陣列)的元素

第三步:2個陣列的最後還要加乙個無窮大的數(可以用0x7fff表示),因此開闢的陣列空間要多1字元個空間

//第乙個引數為需要排序的陣列,第2個引數為分割的第乙個陣列開始元素的下標  

//第3個引數為分割的第乙個陣列的最後1個元素的下標  

//第4個引數為陣列最後1個元素的下標  

void merge(int *a,int p,int q,int r)  

g=0;  

for(i=q+1;i<=r;i++)  

//逐個比較左右兩組陣列,把較小的值寫入原來的陣列  

j=k=0;  

for(i=p;i<=r;i++)  

else  

}  }  完整**:

[cpp]view plain

copy

#include

using namespace std;  

//第乙個引數為需要排序的陣列,第2個引數為分割的第乙個陣列開始元素的下標  

//第3個引數為分割的第乙個陣列的最後1個元素的下標  

//第4個引數為陣列最後1個元素的下標  

void merge(int *a,int p,int q,int r)  

g=0;  

for(i=q+1;i<=r;i++)  

//逐個比較左右兩組陣列,把較小的值寫入原來的陣列  

j=k=0;  

for(i=p;i<=r;i++)  

else  

}  }  void mergesort(int *a,int p,int r)  

}  void main()  

;  mergesort(a,0,4);  

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

cout

}  

二路歸併排序(也叫合併排序)

下面這圖展示了二路歸併的過程 二路歸併的核心 是merge 函式 它將2個分割的陣列有序的合併在一起 如圖 在陣列a中,從p到q是乙個陣列,從q到r是另外乙個陣列 那麼如何將這2個陣列有序的合併在一起,組個新的陣列a呢?步驟 第一步 開闢乙個陣列l,存放p到q之間 也就是需要歸併的左邊陣列 的元素 ...

二路歸併排序(也叫合併排序)

下面這圖展示了二路歸併的過程 二路歸併的核心 是merge 函式 它將2個分割的陣列有序的合併在一起 如圖 在陣列a中,從p到q是乙個陣列,從q到r是另外乙個陣列 那麼如何將這2個陣列有序的合併在一起,組個新的陣列a呢?步驟 第一步 開闢乙個陣列l,存放p到q之間 也就是需要歸併的左邊陣列 的元素 ...

10 歸併排序 二路歸併排序

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