Merge sort when array starts from zero(0) index???

Hi friends,
I have implemented the merge sort algorith in c, before I put forward my question, you please have a look at my code.

 
// The array is sorted, as 1234
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int A[] = {4, 3, 2, 1};
void Merge_Sort(int [], int, int);
void Merge(int [], int, int, int);
int main()
{
    int i;
    printf("Unsorted array\n\n");
    for(i = 0 ; i < 4 ; i++)
    {
        printf("%d\n",A);
    }
    Merge_Sort(A,0,3);
    printf("\nSorted array\n\n");
    for(i = 0 ; i < 4 ; i++)
    {
        printf("%d\n",A);
    }
    printf("\n\n");
    return 0;
}
void Merge_Sort(int A[], int p, int r)
{
    int q;
    if(p < r)
    {
        q = floor((p + r)/2);
        Merge_Sort(A, p, q);
        Merge_Sort(A, q + 1, r);
        Merge(A, p, q, r);
    }
    return 0;
}
void Merge(int A[], int p, int q, int r)
{
    int n1, n2, i, j, k;
    n1 = (q - p) + 1 ;
    n2 = r - q;
    int L[n1 + 1];
    int R[n2 + 1];
    for(i = 1 ; i <= n1 ; i++)
    {
        L = A[(p + i) - 1];
    }
    for(j = 1 ; j <= n2 ; j++)
    {
        R[j] = A[q + j];
    }
    L[n1 + 1] = 999999999;
    R[n2 + 1] = 999999999;
    i = 1;
    j = 1;
    for(k = p ; k <= r ; k++)
    {
        if(L <= R[j])
        {
        A[k] = L;
        i = i + 1;
        }
        else
        {
        A[k] = R[j];
        j = j + 1;
        }
    }
    return 0;
}

The above code works perfectly, while the code below doesn't work. Where am I going wrong???

 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int A[] = {4, 3, 2, 1};
void Merge_Sort(int [], int, int);
void Merge(int [], int, int, int);
int main()
{
    int i;
    printf("Unsorted array\n\n");
    for(i = 0 ; i < 4 ; i++)
    {
        printf("%d\n",A);
    }
    Merge_Sort(A,0,3);
    printf("\nSorted array\n\n");
    for(i = 0 ; i < 4 ; i++)
    {
        printf("%d\n",A);
    }
    printf("\n\n");
    return 0;
}
void Merge_Sort(int A[], int p, int r)
{
    int q;
    if(p < r)
    {
        q = floor((p + r)/2);
        Merge_Sort(A, p, q);
        Merge_Sort(A, q + 1, r);
        Merge(A, p, q, r);
    }
    return 0;
}
void Merge(int A[], int p, int q, int r)
{
    int n1, n2, i, j, k;
    n1 = (q - p) + 1;
    n2 = r - q;
    int L[n1 + 1];
    int R[n2 + 1];
    for(i = 0 ; i < n1 ; i++)
    {
        L = A[(p + i) - 1];
    }
    for(j = 0 ; j < n2 ; j++)
    {
        R[j] = A[q + j];
    }
    L[n1 + 1] = 999999999;
    R[n2 + 1] = 999999999;
    i = 0;
    j = 0;
    for(k = p ; k <= r ; k++)
    {
        if(L <= R[j])
        {
        A[k] = L;
        i = i + 1;
        }
        else
        {
        A[k] = R[j];
        j = j + 1;
        }
    }
    return 0;
}
 
 
 
 

My algorithm doesn't work just because the created arrays start from zero index, could you please help me with this, where am I wrong?
Thanks in advance!