Merge sort of an integer list source code

This snippet submitted by Bibhubrata Narendra on 2010-03-28. It has been viewed 10480 times.
Rating of 4.6 with 79 votes

#include<stdio.h>

#define SIZE 100

void mergesort(int, int a[]);
int main()
{
    int a[SIZE];
    int i, n;

    printf("No of elements to be sorted:\n");
    scanf("%d",&n);
    printf("Enter the elements:\n");
    for(i=0;i<n;i++)
	scanf("%d",&a[i]);
    printf("Unsorted list:\n");
    for(i=0;i<n;i++)
	printf("%d",a[i]);
    printf("\n");
    mergesort(n, &a);
    printf("Sorted list:\n");
    for(i=0;i<n;i++)
	printf("%d ",a[i]);
    printf("\n");
    return 0;
}
void mergesort(int n, int a[])
{
    int n1, n2, i, j, k;
    int a1[n];
    int *a2, *a3;
    for (i=0;i<n;i++)
	a1[i] = a[i];
    if (n%2 == 0) 
	n1 = n/2;
    else 
	n1 = n/2 + 1;
    n2 = n - n1;
    if (n > 2) 
    {
	mergesort(n1, &a1);
	mergesort(n2, &a1[n1]);
    }
    j = k = 0;
    a2 = &a1;
    a3 = &a1[n1];
    for (i=0;i<n;i++)
    {
	if (k == n2)
	{
	    a[i] = *(a2+j);
	    j++;
	}
	else if (j == n1)
	{
	    a[i] = *(a3+k);
	    k++;
	}
	else if(*(a2+j) <= *(a3+k))
	{
	    a[i] = *(a2+j);
	    j++;
	}
	else
	{
	    a[i] = *(a3+k);
	    k++; 
	}
    }
}




More C and C++ source code snippets