未测试边界条件
#include <iostream>
using namespace std;
void merge(int a[], int left, int mid, int right){
int *tmp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while(i <= mid && j <= right){
if (a[i] < a[j]){
tmp[k] = a[i];
++i;
}
else{
tmp[k] = a[j];
++j;
}
++k;
}
while(i <= mid){
tmp[k] = a[i];
++k; ++i;
}
while(j <= right){
tmp[k] = a[j];
++k; ++j;
}
for (k = 0, i = left; i <= right; ++k, ++i){
a[i] = tmp[k];
}
delete [] tmp;
}
void msort(int a[], int left, int right){
if (left >= right)
return;
int mid = (left + right) / 2;
msort(a, left, mid);
msort(a, mid + 1, right);
merge(a, left, mid, right);
}
int main(){
int a[10] = {5, 9, 3, 4, 6, 1, 2, 0, 7, 8};
msort(a, 0, 9);
for (int i = 0; i < 10; ++i)
cout << a[i] << endl;
int ttt = 0;
return 0;
}