Explanation :
void mergesort(int arr[],int n)
{
int l1,l2,u1,u2,i,j,k,size,*aux;
aux=(int *)malloc(sizeof(int)*n);
size=1;
while(size < n)
{
l1=0,k=0;
while(l1 + size < n)
{
l2=l1+size;
u1=l2-1;
u2=(l2+ size-1< n)?l2 + size-1:n-1;
for(i= l1,j=l2;i<=u1&&j<=u2;k++)
if(arr[i]<=arr[j])
aux[k]=arr[i++];
else
aux[k]=arr[j++];
for(;i<=u1;k++)
aux[k]=arr[i++];
for(;j<=u2;k++)
aux[k]=arr[j++];
l1=u2+1;
}
for(i=l1;k < n;i++)
aux[k++]=arr[i];
for(i=0;i < n;i++)
arr[i]=aux[i];
size=size*2;
}
}