void merge(int L[],int R[],int A[]){
int nL=sizeof(L)/sizeof(L[0]);
int nR=sizeof(R)/sizeof(R[0]);
int i=0,j=0,k=0;
while(i<nL && j<nR){
if(L[i]<=R[j]){
A[k]=L[i];
i++;}
else{
A[k]=R[j];
j++;
}
k++;
}
while(i<nL){
A[k]=L[i];
i++;
k++;
}
while(j<nR){
A[k]=R[j];
j++;
k++;
}
}
void mergeSort(int A[]){
int n=sizeof(A)/sizeof(A[0]);
if(n<2)
return;
int mid=n/2;
int left[mid];
int right[n-mid];
for(int i=0;i<mid;i++)
{
left[i]=A[i];
}
for(int i=mid;i<n;i++){
right[i-mid]=A[i];
}
mergeSort(left);
mergeSort(right);
merge(left,right,A);
}
void printArray(int *A,int size){ for(int i=0;i<size;i++){ cout<<A[i]<<endl; }}