Merge Sort(Ascending Order)

#include<bits/stdc++.h>
#define n1 First_Array_size
#define n2 Second_Array_size
#define F First_Array
#define L Second_Array
using namespace std;

void A_merge(int a[], int left, int mid, int right)
{
    int i, j, n1, n2, k;

    n1 = mid - left +1;
    n2 = right - mid;

    int F[n1], L[n2];

    for(i=0;i<n1;i++)
        F[i] = a[left+i];

    for(j=0;j<n2;j++)
        L[j] = a[mid+1+j];

    i = j = 0;
    k = left;
    while(i<n1 && j<n2)
    {
        if(F[i] <= L[j])
            a[k++] = F[i++];
        else
            a[k++] = L[j++];
    }
    while(i<n1)
        a[k++] = F[i++];
    while(j<n2)
        a[k++] = L[j++];
}

void merge_sort(int a[], int left, int right)
{
        if(left>=right)
            return;
        int mid = left + (right - left)/2;
        merge_sort(a, left, mid);
        merge_sort(a, mid+1, right);
        A_merge(a, left, mid, right);
}

int main()
{
    int i, n;
    cout << "Enter Array Element Number :: ";
    cin >> n;
    int a[n];
    cout << "Enter Array Element :: ";
    for(i=0;i<n;i++)
        cin >> a[i];

    merge_sort(a, 0, n-1);

    cout << endl << "After Merge Sort :: ";
    for(i=0;i<n;i++)
        cout << a[i] << " ";

    cout << endl;
    return 0;
}

Comments