public class MergeSort {

public static void main(String[] args) {
// TODO Auto-generated method stub

int[] array={8,7,6,5,4,3,2,1};
MERGE_SORT(array,0,array.length-1);
for(int i=0;i<array.length;i++)
System.out.print(array[i]+" ");
}
public static void MERGE_SORT(int [] a,int p,int r){
if(p<r){
int 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){
final int MAX=999999;
int n1=q-p+1;
int n2=r-q;
int[] left=new int[n1+1];
int[] right=new int[n2+1];

for(int i=0;i<n1;i++)
left[i]=a[p+i];
for(int j=0;j<n2;j++)
right[j]=a[q+j+1];
//哨兵
left[n1]=MAX;
right[n2]=MAX;

int i=0,j=0;
for(int k=p;k<=r;k++){
if(left[i]<=right[j]){
a[k]=left[i];
i++;
}
else{
a[k]=right[j];
j++;
}
}
}
}