归并排序

今天复习了一下归并排序,现在来写一下归并排序的主要函数的代码

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);

}

 

posted @ 2019-07-12 14:15  xbc121  阅读(113)  评论(0编辑  收藏  举报