#include <stdio.h>

int main(int argc, char **argv) {
 int array[argc];
 int i;
 for(i = 1; i < argc; i++) {
  array[i-1]=atoi(argv[i]);
 }

 /* print the original array */
 printf("Before mergesort: ");
 for(i = 0; i < argc-1; i++) {
  printf(" %d ", array[i]); 
 }
 printf("\n");

 mergesort(array, 0, argc-2);

 /* print the `mergesorted' array */
 printf("After  mergesort: ");
 for(i = 0; i < argc-1; i++) {
  printf(" %d ", array[i]); 
 }
 printf("\n");

 return 0;
}

mergesort(int a[], int low, int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
mergesort(a,low,mid);
mergesort(a,mid+1,high);
merge(a,low,high,mid);
}
return(0);
}

merge(int a[], int low, int high, int mid)
{
int i, j, k, c[50];
i=low;
j=mid+1;
k=low;
while((i<=mid)&&(j<=high))
{
if(a[i]<a[j])
{
c[k]=a[i];
k++;  i++;
}
else
{
c[k]=a[j];
k++;  j++;
}
}
while(i<=mid)
{
c[k]=a[i];
k++;  i++;
}
while(j<=high)
{
c[k]=a[j];
k++;  j++;
}
for(i=low;i<k;i++)
{
a[i]=c[i];
}
} 

