还是这个老哥写的好:
二路合并排序的基本思想是:对于两个有序表合并,初始时, 把含有n个结点的待排序序列看作有n个长度为1的有序子表所组成,将它们依次两两合并,得到长度为2的若干有序子表,再对这些子表进行两两合并,一直重复到长度为n,排序完成。
1 package Sort; 2 import java.util.Arrays; 3 4 public class MergeSort { 5 6 public static void mergeSort(int [] arr){ 7 8 if(arr ==null||arr.length<2){ 9 return ; 10 } 11 sortProcess(arr, 0, arr.length-1); 12 } 13 14 public static void sortProcess(int []arr,int L,int R){ 15 if(L==R){ 16 return; 17 } 18 int mid = L+((R-L)>>1);//等同于(L+R)/2 19 sortProcess(arr, L, mid); 20 sortProcess(arr, mid+1, R); 21 merge(arr,L,mid,R); 22 } 23 24 public static void merge(int []arr,int L,int mid,int R){ 25 int[] help= new int[R-L+1]; 26 int i =0; 27 int p1 = L; 28 int p2 = mid+1; 29 while(p1<=mid && p2<=R){ 30 if(arr[p1]