#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
//一次二路归并排序
void Merge(DataType a[], int n, DataType swap[], int k)
{
int m = 0, u1, l2, i, j, u2;
int l1 = 0;
while(l1+k<=n-1)
{
l2 = l1 + k;
u1 = l2 - 1;
u2 = (l2+k-1<= n-1)? l2+k-1:n-1;
for(i=l1, j=l2; i<=u1&&j<=u2;m++)
{
if(a[i]<=a[j])
{
swap[m] = a[i];
i++;
}
else
{
swap[m] = a[j];
j++;
}
}
while(i<=u1)
{
swap[m] = a[i];
m++;
i++;
}
while(j<=u2)
{
swap[m] = a[j];
m++;
j++;
}
l1 = u2 +1;
}
for(i=l1;i<n;i++,m++) swap[m] = a[i];
}
void MergeSort(DataType a[], int n)
{
int i, k = 1;
DataType *swap;
swap = (DataType *)malloc(sizeof(DataType)*n);
while(k<n)
{
Merge(a,n,swap,k);
for(i=0;i<n;i++)
a[i] = swap[i];
k = 2 * k;
}
free(swap);
}
int main()
{
DataType a[]={72,73,71,23,94,16,5,68,64};
MergeSort(a, 9);
for(int i=0;i<9;i++){
printf("%d ",a[i]);
}
return 0;
}