这是我的java代码。
public static int[] merge_sort(int[] arr, int p, int r) {
if (p < r) {
int q = p + r / 2;
merge_sort(arr, p, q);
merge_sort(arr, q + 1, r);
merge(arr, p, q, r);
}
return arr;
}
public static void merge(int[] arr, int p, int q, int r) {
int i = p;
int j = q + 1;
int[] tempArr = new int[arr.length];
System.out.println(tempArr.length);
int k = p;
while (i <= q && j <= r) {
if (arr[i] <= arr[j]) {
tempArr[k] = arr[i];
i++;
} else {
tempArr[k] = arr[j];
j++;
}
k++;
}
while (i <= q) {
tempArr[k] = arr[i];
i++;
k++;
}
while (j <= r) {
tempArr[k] = arr[j];
j++;
k++;
}
for (int h = p; h <= r; h++) {
arr[h] = tempArr[h];
}
}
我的测试代码在这里。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] testArr = {3, 5, 1, 9, 2};
int[] sortedArr = merge_sort(testArr, 0, testArr.length - 1);
for (int num: sortedArr) {
System.out.print(num);
}
}
当我使用我的测试代码进行测试时,调用了“java.lang.StackOverflowError”错误。 'merge_sort(arr,p,q);'中发生错误线。 我不知道为什么会出现这个错误。我的代码出了什么问题?
答案 0 :(得分:0)
您的代码中有无尽的递归调用:
merge_sort(arr, p, q); // this one calls the same method over and over again
merge_sort(arr, q + 1, r);
merge(arr, p, q, r);
第一个调用缺少第四个参数
答案 1 :(得分:0)
问题出在这一行:int q = p + r / 2;
这应该是int q = (p + r) / 2;