#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 10000
void Merge(int *A,int p,int q,int r)
{
int LeftSize=q-p+1+1;
int RightSize=r-q+1;
int *Left,*Right;
int i,j,k;
Left=(int*)malloc(LeftSize*sizeof(int));
Right=(int*)malloc(RightSize*sizeof(int));
for(i=0;i<q-p+1;i++)
Left[i]=A[p+i];
for(j=0;j<r-q;j++)
Right[j]=A[q+j+1];
Left[i]=MAXNUM;
Right[j]=MAXNUM;
for(k=p,i=0,j=0;k<r+1;k++)
if(Left[i]<Right[j])
{
A[k]=Left[i];
i++;
}
else
{
A[k]=Right[j];
j++;
}
free(Left);
free(Right);
}
void MergeSort(int *A,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
MergeSort(A,p,q);
MergeSort(A,q+1,r);
Merge(A,p,q,r);
}
}
int main()
{
int r[10]={1,2,3,4,5,2,3,4,5,7};
int i;
printf("
Before merging sort:");
for(i=0; i<10; i++) printf("%-3d",r[i]);
printf("
");
MergeSort(r,0,9);
printf("After merging sort:");
for(i=0; i<10; i++) printf("%-3d",r[i]);
printf("
");
return 0;
}