資料結構與演算法之歸併排序

2021-08-19 02:14:21 字數 1223 閱讀 3745

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

歸併過程為:比較a[i]和b[j]的大小,若a[i]≤b[j],則將第乙個有序表中的元素a[i]複製到r[k]中,並令i和k分別加上1;否則將第二個有序表中的元素b[j]複製到r[k]中,並令j和k分別加上1,如此迴圈下去,直到其中乙個有序表取完,然後再將另乙個有序表中剩餘的元素複製到r中從下標k到下標t的單元。歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。

下面來看一下歸併排序的過程示意圖:

從圖中可以清晰的得知歸併的思想就是將大量的資料分成很多小組資料,再由各個小組進行排序。進而將其進行合併。由此不難得出**:

public class mergesort 

/*** @author:kevin

* @description: 遞迴呼叫

* @date:22:25 2018/4/10

*/public void mergesort(int arr, int left, int right)

int mid = (left + right) / 2;

mergesort(arr, left, mid);

mergesort(arr, mid+1, right);

merge(arr, left, mid, right);

}/**

* @author:kevin

* @description: 歸併過程

* @date:22:25 2018/4/10

*/public void merge(int arr, int left, int mid, int right)

if (arr[i] >= arr[j])

}while (i <= mid)

while (j <= right)

for (int l = 0; l < temparr.length; l++) }}

《資料結構與演算法》之排序演算法(歸併排序)

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

資料結構 排序演算法之歸併排序

基本思想 將待排序的元素序列分成兩個等長的子串行,再將子串行劃分子串行,直到子串行中只有乙個元素就不用在對子序列繼續進行劃分,將劃分的每個區塊,進行排序,然後再將其歸併到乙個序列中,直到將所有的子串行歸併完成之後,則這個序列就完成了排序。1 基本思想如下所示 經過上面的劃分,從而可以看出經過劃分與歸...

資料結構 排序演算法之歸併排序

演算法思想 歸併排序是利用歸併的思想實現的排序方法,該演算法採用 分而治之 的思想將問題分成一些小的問題然後遞迴實現,最後合而為之。實現 遞迴實現 void merge int arr,const int left,const int mid,const int right,int temp whi...