八大排序演算法(七)歸併排序

2021-07-04 14:39:09 字數 1086 閱讀 7096

基本思想:

歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。

歸併排序示例:

合併方法:

設r[i…n]由兩個有序子表r[i…m]和r[m+1…n]組成,兩個子表長度分別為n-i +1、n-m。

j=m+1;k=i;i=i; //置兩個子表的起始下標及輔助陣列的起始下標

若i>m 或j>n,轉⑷ //其中乙個子表已合併完,比較選取結束

//選取r[i]和r[j]較小的存入輔助陣列rf

如果r[i]

//將尚未處理完的子表中元素存入rf

如果i<=m,將r[i…m]存入rf[k…n] //前一子表非空

如果j<=n ,  將r[j…n] 存入rf[k…n] //後一子表非空

合併結束。

//將r[i…m]和r[m +1 …n]歸併到輔助陣列rf[i…n]  

void merge(elemtype *r,elemtype *rf, int i, int m, int n)

while(i <= m) rf[k++] = r[i++];

while(j <= n) rf[k++] = r[j++];

}

歸併的迭代演算法1 個元素的表總是有序的。所以對n 個元素的待排序列,每個元素可看成1 個有序子表。對子錶兩兩合併生成n/2個子表,所得子表除最後乙個子表長度可能為1 外,其餘子表長度均為2。再進行兩兩合併,直到生成n 個元素按關鍵碼有序的表。

void print(int a, int n)  

} void mergesort_recursive(elemtype *r, elemtype *rf, int n)

八大排序演算法 歸併排序(七)

歸併排序 public class mergesort int mid right left 2 left mergesort data,left,mid mergesort data,mid 1,right int i left int j mid 1 int temp 0 while i j j...

八大排序演算法 歸併排序

歸併排序的定義 是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序的基本思想 設r i n 由兩個有序子表r i m 和r m 1 n 組成,兩個子表長度分別為n i 1 n m。1 j m 1 k i...

八大排序 歸併排序

歸併排序 1.申請空間,使其大小為兩個已經排序的序列之和,用來存放合併後的序列。2.設定兩個指標指向兩序列的開始。3.比較兩個指標所指的元素,選擇小的放的合併空間,移動指標。4.重複3直到某個指標到達序列尾。5.將剩餘的元素拷到合併空間。實現 void merge sort int arr,int ...