I am trying to implement merge sort algorithm in C++. This is my code.Logic seems to be fine. But the output I'm getting is garbage values.I'm not able to get where the problem is in the code. I think my logic is correct but I'm not sure.
#include <iostream>
using namespace std;
void Merge(int A[],int L[],int nL,int R[],int nR);
void MergeSort(int A[]);
   //Function to Merge Arrays L and R into A. 
   //nL = number of elements in L
   //nR = number of elements in R. 
void Merge(int A[],int L[],int nL,int R[],int nR)
{ 
   // i - to mark the index of left subarray (L)
   // j - to mark the index of right sub-raay (R)
   // k - to mark the index of merged subarray (A)
   int i=0;
   int j=0;
   int k=0;
  while(i<nL && j<nR)
   {
      if(L[i]<=R[i])
      { A[k]=L[i];
        i=i+1;
      }
      else
      { A[k]=R[j];
        j=j+1;
      }
      k=k+1;
  }
  while(i<nL)
  { A[k]=L[i];
      i=i+1;
      k=k+1;
  }
  while(j<nR)
  { A[k]=R[j];
    j=j+1;
    k=k+1;
  }
}
// Recursive function to sort an array of integers. 
void MergeSort(int A[],int n)
{
  if (n<2) return;//base condition.If the array has less than two 
                     //elements, do nothing
  int mid=n/2;
   // create left and right subarrays
   // mid elements (from index 0 till mid-1) should be part of left sub- 
      //array 
   // and (n-mid) elements (from mid to n-1) will be part of right sub- 
      //array
  int left[mid];
  int right[n-mid];
  for(int i=0;i<mid-1;i++) left[i]=A[i];// create left subarray
  for(int i=mid;i<n-1;i++) right[i-mid]=A[i];// create right subarray
  MergeSort(left,mid);
  MergeSort(right,n-mid);
  Merge(A,left,mid,right,n-mid);
}
int main()
{ int A[]={2,4,7,1,5,3};
  int n=sizeof(A)/sizeof(A[0]);
  MergeSort(A,n);
  for(int i=0;i<n;i++) cout<<A[i]<<" ";
  return 0;
}
Expected output is 1 2 3 4 5 7
But actual is 0 -785903160 1 0(every time it's different)
 
     
    