归并排序
今天复习了一下归并排序,现在来写一下归并排序的主要函数的代码
public static void mergeSort(int[]arr,int l,int r){
int mid=l+(r-l)/2;
if(l<r){//要注意的地方,只有在l<r的时候才进行递归
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,r,mid);
}
}
private static void merge(int[]arr,int l,int r,int mid){
int[]t=new int[r-l+1];
int p=l,q=mid+1,i=0;
while(p<=mid&&q<=r){//这个循环思路很好理解,但是这部分代码基本上就是种套路,要做到很熟练
if(arr[p]<=arr[q])
t[i++]=arr[p++];
else
t[i++]=arr[q++];
}
if(p>mid)
System.arraycopy(arr,q,t,i,r-l-i+1);
if(q>r)
System.arraycopy(arr,p,t,i,r-l-i+1);
System.arraycopy(t,0,arr,l,r-l+1);
}