importjava.util.Arrays;publicclassMergeSort{publicstaticvoidmain(String[]args){int[]a={5,1,6,2,3,4,7,8,9,10};sort(a,0,a.length-1);System.out.println("Sorted array :"+Arrays.toString(a));}privatestaticvoidsort(int[]a,intl,intr){if(l>=r)return;intm=(l+r)/2;sort(a,l,m);sort(a,m+1,r);merge(a,l,m,r);}privatestaticvoidmerge(int[]a,intl,intm,intr){intn1=m-l+1;// +1 is needed : think 0, 4, 9intn2=r-m;int[]L=newint[n1];int[]R=newint[n2];for(inti=0;i<n1;i++)L[i]=a[l+i];for(inti=0;i<n2;i++)R[i]=a[m+1+i];// Initial indexes of first and second subarraysinti=0,j=0;// initial index of merge arrayintk=l;while(i<n1&&j<n2){if(L[i]<=R[j]){a[k++]=L[i++];}else{a[k++]=R[j++];}}while(i<n1)a[k++]=L[i++];while(j<n2)a[k++]=R[j++];}}