Merge Sort


#include 

void merge();
void merge_sort();

main()
{
    int k,N,*B;
    printf("Enter the number of integers to be sorted:\n");
    scanf("%d",&N);
    B = (int *)malloc(N*sizeof(int));
    printf("Enter %d integers:\n",N);
    for (k = 0; k < N; k++)
    scanf("%d",&B[k]);
    merge_sort(B,0,N-1);
    printf("The sorted array is:\n");
    printf("\n");
    for (k=0; k < N; k++)
        printf("B[%d] = %d\n",k,B[k]);
    printf("\n");
    return 0;
} /* main */

void merge(int *A, int first, int middle, int last)
{
    int i, left, right, *temp;
    temp = (int *)malloc(sizeof *temp);
    left = first;
    right = middle + 1;
    i = first;
    while (left <= middle && right <= last)
    {
        if (A[left] < A[right])
        {
            temp[i] = A[left];
            left++; i++;
        }
        else
        {
            temp[i] = A[right];
            right++; i++;
        }
    }
    while (left <= middle)
    {
        temp[i] = A[left];
        left++; i++;
    }
    while (right <= last)
    {
        temp[i] = A[right];
        right++; i++;
    }
    for (i = first; i <= last; i++)
        A[i] = temp[i];
} /* merge */


void merge_sort(int *A, int first, int last)
{
    int middle;
    if (first < last)
    {
        middle = (first + last)/2;
        merge_sort(A,first,middle);
        merge_sort(A,middle+1,last);
        merge(A,first,middle,last);
    }
} /* merge_sort */