private static int[] mergeSort(int[] array) {
//如果数组的长度大于1,继续分解数组
if (array.length > 1) {
int leftLength = array.length / 2;
int rightLength = array.length - leftLength;
//创建两个新的数组
int[] left = new int[leftLength];
int[] right = new int[rightLength];
//将array中的值分别对应复制到两个子数组中
for (int i=0; i<leftLength; i++) {
left[i] = array[i];
}
for (int i=0; i<rightLength; i++) {
right[i] = array[leftLength+i];
}
//递归利用合并排序,排序子数组
left = mergeSort(left);
right = mergeSort(right);
//设置初始索引
int i = 0;
int j = 0;
for (int k=0; k<array.length; k++) {
//如果左边数据索引到达边界则取右边的值
if (i == leftLength && j < rightLength) {
array[k] = right[j];
j++;
//如果右边数组索引到达边界,取左数组的值
} else if (i < leftLength && j == rightLength) {
array[k] = left[i];
i++;
//如果均为到达则取,较小的值
} else if (i < leftLength && j < rightLength) {
if (left[i] > right[j]) {
array[k] = right[j];
j++;
} else {
array[k] = left[i];
i++;
}
}
}
}
return array;
}
//如果数组的长度大于1,继续分解数组
if (array.length > 1) {
int leftLength = array.length / 2;
int rightLength = array.length - leftLength;
//创建两个新的数组
int[] left = new int[leftLength];
int[] right = new int[rightLength];
//将array中的值分别对应复制到两个子数组中
for (int i=0; i<leftLength; i++) {
left[i] = array[i];
}
for (int i=0; i<rightLength; i++) {
right[i] = array[leftLength+i];
}
//递归利用合并排序,排序子数组
left = mergeSort(left);
right = mergeSort(right);
//设置初始索引
int i = 0;
int j = 0;
for (int k=0; k<array.length; k++) {
//如果左边数据索引到达边界则取右边的值
if (i == leftLength && j < rightLength) {
array[k] = right[j];
j++;
//如果右边数组索引到达边界,取左数组的值
} else if (i < leftLength && j == rightLength) {
array[k] = left[i];
i++;
//如果均为到达则取,较小的值
} else if (i < leftLength && j < rightLength) {
if (left[i] > right[j]) {
array[k] = right[j];
j++;
} else {
array[k] = left[i];
i++;
}
}
}
}
return array;
}