#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
void Merge(int data[], int l, int m, int r)
{
int i, j, k;
int *pd;
pd = (int *)malloc((r - l + 1) * sizeof(int));
i = l;
j = m + 1;
k = 0;
while(i <= m && j <= r) pd[k++] = data[i] < data[j] ? data[i++] : data[j++];
while(i <= m) pd[k++] = data[i++];
while(j <= r) pd[k++] = data[j++];
for(k = 0, i = l; i <= r; i++, k++) data[i] = pd[k];
free(pd);
}
void MergeSort(int data[], int l, int r)
{
int m;
if(l < r){
m = (l + r) >> 1;//除2向下取整
MergeSort(data, l, m);//递归
MergeSort(data, m + 1, r);
Merge(data, l, m, r);
}
}
int main()
{
int mydata[10] = {2, 1, 3, 4, 6, 5, 8, 7, 10, 9};
MergeSort(mydata, 0, 9);
for(int i = 0; i <= 9; i++)
{
cout<<mydata[i]<<" ";
}
return 0;
}