public class mergeSort {
public static void main(String [] args){
int[] b={72,73,71,23,94,16,5,68,64};
mergeSort(b);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+" ");
}
}
public static void mergeSort(int [] a){
int [] tmpArray=new int[a.length];//临时数组
mergeSort(a,tmpArray,0,a.length-1);
}
private static void mergeSort(int []a,int [] tmp,int left,int right){
if(left<right){
int center=(left+right)/2;
mergeSort(a,tmp,left,center);
mergeSort(a,tmp,center+1,right);
merge(a,tmp,left,center+1,right);
}
}
private static void merge(int []a,int[]tmp,int leftPos,int rightPos,int rightEnd){
int leftEnd=rightPos-1;
int tmpPos=leftPos;
int numElements=rightEnd-leftPos+1;
//主循环
while(leftPos<=leftEnd&&rightPos<=rightEnd){
if(a[leftPos]<=a[rightPos]){
tmp[tmpPos++]=a[leftPos++];
}
else{
tmp[tmpPos++]=a[rightPos++];
}
}
//将左边 剩余的 元素放进tmp[]里
while(leftPos<=leftEnd){
tmp[tmpPos++]=a[leftPos++];
}
//将右边 剩余的 元素放进tmp[]里
while(rightPos<=rightEnd){
tmp[tmpPos++]=a[rightPos++];
}
//将临时数组放进a[]里
for(int i=0;i<numElements;i++,rightEnd--){
a[rightEnd]=tmp[rightEnd];
}
}
}