#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct RcdType
{
ElemType key;
}RcdType;
void Merge (RcdType SR[],int low,int mid,int high)
{
int i,j,k;
RcdType* TR;
if( !(TR=(RcdType*)malloc(sizeof(RcdType)*(high-low+1))))
exit(0);
for(j=mid+1,i=low,k=0; i<=mid&&j<=high; k++)
{
if(SR[i].key<=SR[j].key) TR[k]=SR[i++];
else TR[k]=SR[j++];
}
while(i<=mid)
{
TR[k++]=SR[i++];
}
while(j<=high)
{
TR[k++]=SR[j++];
}
for(i=low;i<=high;i++)
{
SR[i].key=TR[i-low].key;
}
}
void MSort(RcdType SR[],int low,int high)
{
int mid;
if(low!=high)
{
mid=(low+high)/2;
MSort(SR,low,mid);
MSort(SR,mid+1,high);
Merge(SR,low,mid,high);
}
}
void MergeSort(RcdType SR[],int low,int high)
{
int i;
MSort(SR,low,high);
for(i=low;i<=high;i++)
{
printf("%d,",SR[i].key);
}
}
int main()
{
RcdType sr[]={{0},{3},{5},{7},{4},{6},{8},{12},
{15},{54},{12},{65},{32},{15},{15},{78},{154},
{3544},{32112},{321},{155},{321}};
MergeSort(sr,0,21);
return 0;
}