public class MergeSortTest { public static void main(String[] args){ int[] arrs = new int[]{3,5,6,2,4,1,6,8,4,3,0}; mergeSort(arrs,0,arrs.length - 1); System.out.println(Arrays.toString(arrs)); } public static void mergeSort(int[] arrs,int begin,int end){ int middle = arrs.length / 2; //一分为二 //分别初始化左右两边数组 int[] left = new int[middle - begin]; int[] right = new int[end - middle + 1]; for(int i = 0; i < middle - begin;i++){ left[i] = arrs[i + begin]; } for(int i = 0; i < end - middle + 1; i++){ right[i] = arrs[i + middle]; } //分别对左右两边数组作归并 if(left.length > 1) mergeSort(left,0,left.length - 1); if(right.length > 1) mergeSort(right,0,right.length - 1); //合并左右两边数组 merge(arrs,left,right); } //执行merge的前提是left与right都已经排好序 public static void merge(int[] arrs,int[] left,int[] right){ int m = 0; int n = 0; for(int j = 0; j < arrs.length;j++){ if(m == left.length){ arrs[j] = right[n]; n++; continue; } if(n == right.length){ arrs[j] = left[m]; m++; continue; } if(left[m] < right[n]){ arrs[j] = left[m]; m++; }else{ arrs[j] = right[n]; n++; } } } }
排序算法之归并排序
最新推荐文章于 2022-01-15 19:15:48 发布