以下是我的快速排序:
public int[] arrayToSort = {5, 1, 3, 2, 2, 9};
...
private void quickSort(int left, int right) {
int i = left;
int j = right;
int pivot = arrayToSort[(left + right - left) / 2];
while (i <= j) {
while (arrayToSort[i] < pivot) {
i++;
}
while(arrayToSort[j] > pivot) {
j--;
}
if(i <= j) {
swap(arrayToSort, i, j);
i++;
j--;
}
}
if(left < j) {
quickSort(left, j);
}
if(i <right) {
quickSort(i, right);
}
}
private void swap(int[] arrayToSort, int i, int j) {
int temp = arrayToSort[i];
arrayToSort[i] = arrayToSort[j];
arrayToSort[j] = temp;
}
我真的不确定为什么我在quickSort(..)方法的第一行得到StackOverflowError。问题是什么?不知道如何使用调试器来帮助我。
提前致谢
答案 0 :(得分:1)
这条线几乎肯定是错的。
(left + right - left) / 2
与
相同 right / 2
最有可能是
left + (right - left) / 2
甚至可能
(left + right) >>> 1
就像在JDK中一样。
我不确定如何使用调试器来帮助我。
在调试器中,如果mid
被错误地计算而没有将其放入变量或表达式中,则更难以看到。