最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
#include <stdio.h> //两个顺序序列进行合并 void Merge(int a[],int temp[],int start,int mid,int end) { int i = start,j = mid+1,k = start; while(i != mid+1 && j != end+1) { if(a[i] > a[j]) { temp[k++] = a[j++]; } else { temp[k++] = a[i++]; } } while(i != mid+1) { temp[k++] = a[i++]; } while(j != end+1) { temp[k++] = a[j++]; } for(i = start;i <= end;i++) { a[i] = temp[i]; } } //内部使用递归 void Mergesort(int a[],int temp[],int start,int end) { int mid; if(start < end) { mid = (start+end)/2; Mergesort(a,temp,start,mid); Mergesort(a,temp,mid+1,end); Merge(a,temp,start,mid,end); } } int main(int argc,char *argv[]) { int str[8] = {7,1,3,2,5,4,8,6}; int i,ptr[8]; Mergesort(str,ptr,0,7); for(i = 0;i < 8; i++) { printf("M",str[i]); } printf("\n"); return 0; }