#include<iostream>
using namespace std;
void merge(int *a, int p, int q, int r){
int m = q + 1;
int k = p;
int *b1 = new int[q-p+1];
int *b2 = new int[r-m+1];
for(int i = p,j = 0; (i < m)&&(j<q-p+1); i++){
b1[j++] = a[i];
}
for(int i = m, j = 0; (i < r + 1)&&(j<r-m+1); i++){
b2[j++] = a[i];
}
int c1,c2;
for(c1 = 0, c2 = 0; (c1 < q-p+1) && (c2 < r-m+1);){
if(b1[c1] > b2[c2]){
a[k++] = b2[c2];
c2++;
}else{
a[k++] = b1[c1];
c1++;
}
}
if(c1 < q-p+1){
for(int i = c1; i < q-p+1; i++){
a[k++] = b1[i];
}
}
if(c2 < r-m+1){
for(int i = c2; i < r-m+1 ; i++){
a[k++] = b2[i];
}
}
}
void mergeSort(int *a,int p, int r){
if(p < r){
int q = (p+r)/2;
mergeSort(a,p,q);
mergeSort(a,q+1,r);
merge(a,p,q,r);
}
}
void main(){
int a[] = {2,4,1,121,9,111,8,10,12,0};
int length = sizeof(a)/sizeof(a[0]);
mergeSort(a,0,length-1);
for(int i = 0; i < length; i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
输出结果: