// 对左边数组进行递归
mSort(k, 0, center);
// 对右边数组进行递归
mSort(k, center + 1, right);
// 合并
merging(k, left, center, right);
}
接着合并是怎样实现的呢?
-
初始化一个数组,将左右数组的数进行比较,将较小的数存入中间数组
-
再将左右数组剩下的数存到中间数组
-
最后,将中间数组复制回原来的数组
private static void merging(int[] k, int left, int center, int right) {
int tempArr[] = new int[k.length];// 存放数据的数组
// third记录中间数组的索引
int mid = center + 1;
int third = left;
int temp = left;
while (left <= center && mid <= right) {
// 从左右两个数组找出最小的数存入tempArr数组
if (k[left] < k[mid]) {
tempArr[third++] = k[left++];
} else {
tempArr[third++] = k[mid++]