有关归并排序:其中的分治思想很值得参考:
1 /** 2 * 归并排序 块合并 3 * @param num 目标的排序数组 4 * @param leftIndex 传入的分治块的做左端索引 5 * @param mid 中间索引 6 * @param rightIndex 传入的分治块的做右端索引 7 * @param temp 中间转储数组 8 */ 9 public static void merge(int[] num,int leftIndex,int mid,int rightIndex,int[] temp){ 10 int i=leftIndex; 11 int j=mid+1; 12 int t=0; 13 //每次都分成两组进行比较合并,每次合并一定是单侧有序的 14 while (i<=mid&&j<=rightIndex){ 15 if (num[i]<num[j]){ 16 temp[t++]=num[i++]; 17 } 18 else{ 19 temp[t++]=num[j++]; 20 } 21 } 22 //剩余的进行合并 23 while (i<=mid){ 24 temp[t++]=num[i++]; 25 26 } 27 while (j<=rightIndex){ 28 temp[t++]=num[j++]; 29 } 30 //数组进行归为 31 t=0; 32 int tIndex=leftIndex; 33 while (tIndex<=rightIndex){ 34 num[tIndex++]=temp[t++]; 35 } 36 } 37 38 /** 39 * 分治合并 40 * @param num 目标排序数组 41 * @param leftIndex 左端索引 42 * @param rightIndex 右端索引 43 * @param temp 中间转储数组 44 */ 45 public static void mergeSort(int[] num,int leftIndex,int rightIndex,int[] temp) 46 { 47 //递归分治、分模块 48 if (leftIndex<rightIndex){ 49 int mid=(leftIndex+rightIndex)/2; 50 mergeSort(num,leftIndex,mid,temp); 51 mergeSort(num,mid+1,rightIndex,temp); 52 merge(num,leftIndex,mid,rightIndex,temp); 53 54 } 55 }
标签:归并,leftIndex,int,mid,param,Java,排序 From: https://www.cnblogs.com/Mexcellent/p/17273897.html