参考:https://blog.csdn.net/yushiyi6453/article/details/76407640
/** * @param arrays * @return */ public static int[] mergeSort(int[] arrays, int[] copyarrays, int left, int right) { int length = right - left + 1; if (null == arrays || 1 >= length) return arrays; if (length == 2) {//长度为2的时候进行排序 merge(arrays, copyarrays, left, right); return arrays; } int mid = (left + right) / 2; //left sort mergeSort(arrays, copyarrays, left, mid); //right sort mergeSort(arrays, copyarrays, mid + 1, right); //merge merge(arrays, copyarrays, left, right); return arrays; } public static void merge(int[] l, int[] c, int left, int right) { int length = right - left + 1; if (length == 2) {//长度为2的时候进行排序 int tmp; if (l[left] > l[right]) { tmp = l[left]; l[left] = l[right]; l[right] = tmp; } return; } int mid = (left + right) / 2;//合并数组的中间索引值 int lborder = mid;//左数组的右边界 int rborder = right;//右数组的右边界 int le = left;//左数组起始指针 int ri = mid + 1;//右数组起始指针 int cleft = left;//临时数组起始指针 while (cleft <= right) {//合并操作 if (le > lborder) { //right into c while (ri <= rborder) c[cleft++] = l[ri++]; break; } if (ri > rborder) { //left into c while (le <= lborder) c[cleft++] = l[le++]; break; } if (l[le] < l[ri]) c[cleft++] = l[le++]; else c[cleft++] = l[ri++]; } while (left <= right) {//将合并完的结果覆盖原来数据段 l[left] = c[left++]; } }