public class Merge_Sort {
public static void main(String[] args)
{
int[] A ={3,1,2,4,6,7,5,3};
Merge_sort(A,0,7);
for(int i=0;i<A.length;i++)
{
System.out.print(A[i]);
System.out.print(' ');
}
}
public static void Merge_sort(int[] A,int p,int r)
{
int q;
if(p<r)
{
q = (p+r)/2;
Merge_sort(A,p,q);
Merge_sort(A,q+1,r);
Merge(A,p,q,r);
}
}
public static void Merge(int[] A,int p,int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
int L[]= new int[n1];
int R[] = new int[n2];
int i,j;
for(i=0;i<n1;i++)
L[i] = A[p+i];
for(i=0;i<n2;i++)
R[i] = A[q+i+1];
//L[n1-1] = 999999;
//R[n2-1] = 999999;
i=0; j=0;
for(int k=p;k<=r;k++)
{
if(i<L.length && j<R.length && L[i]<=R[j])
{
A[k] = L[i];
i = i+1;
}
else if(i<L.length && j<R.length && L[i]>R[j])
{
A[k] = R[j];
j = j+1;
}
else if(i>=L.length && j<R.length)
{
A[k] = R[j];
j = j+1;
}
else if(i<L.length && j>=R.length)
{
A[k] = L[i];
i = i+1;
}
}
}
}