基本思想:
歸併(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 ...