问题遇到的现象和发生背景
归并排序的数组复制,每次合并的时候复制和先排好序最后在sort函数里复制得到的值不一样
问题相关代码,请勿粘贴截图
这是错误的代码(即排序好再复制) public static void sort(int[] arr) {
int[] toarr = new int [arr.length];
sort(arr, toarr, 0, arr.length-1);
/*
* for(int i = 0; i < toarr.length; i++) { arr[i] = toarr[i]; }
*/
}
这是正确的代码 (每次排序都会复制一次)
public static void merge(int[] arr, int[] toarr, int left, int right) {
int mid = (left + right) / 2;
int i = left;
int k = left;
int j = mid + 1;
while (i <= mid &&j <= right) {
if(arr[i] <= arr[j]) {
toarr[k++] = arr[i];
i++;
}
else {
toarr[k++] = arr[j];
j++;
}
}
while (i <= mid) {
toarr[k++] = arr[i++];
}
while (j <= right) {
toarr[k++] = arr[j++];
}
/*
* while (left <= right) { arr[left] = toarr[left]; left++; }
*/
}
运行结果及报错内容
错误结果(根本就没有排序)
3
1
4
2
7
6
8
9
5