java-归并排序

import java.util.Arrays;


public class MergeSort {

	
	public static void main(String[] args) {

		int[] a={20,1,3,8,5,9,4,25};
		mergeSort(a,0,a.length-1);
		System.out.println(Arrays.toString(a));
	}

	public static void mergeSort(int[] a,int first,int last){
		int len=a.length;
		if(first>=last)return;
		if(first<last){
			//int mid=(first+last)/2;
			//to avoid overflow,you should do it like this:
			int mid=(first&last)+((first^last)>>1);
			int[] temp=new int[len];
			mergeSort(a,first,mid);
			mergeSort(a,mid+1,last);
			mergeTwoArray(temp,a,first,mid,last);
		}
	}
	
	public static void mergeTwoArray(int[] temp,int[] a,int first,int mid,int last){
		int i=first;
		int j=mid+1;
		int k=0;
		while(i<=mid&&j<=last){
			if(a[i]<a[j]){
				temp[k]=a[i];
				i++;
			}else{
				temp[k]=a[j];
				j++;
			}
			k++;
		}
		while(i<=mid){
			temp[k++]=a[i++];
		}
		while(j<=last){
			temp[k++]=a[j++];
		}
		//System.arraycopy(src, srcPos, dest, destPos, length);   
		//at first,i write it like this :   
		//System.arraycopy(temp, 0, a, 0, temp.length);   
		//I can't get it right until I do it like this:   
		System.arraycopy(temp, 0, a, first, last-first+1);  
                //System.arraycopy(temp, 0, a, first, k);//it also works
	}
}


你可能感兴趣的:(java)