Java 尝试使用快速排序方法时获取StackOverflowerError

Java 尝试使用快速排序方法时获取StackOverflowerError,java,algorithm,sorting,Java,Algorithm,Sorting,以下是我的快速排序的外观: 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 (arrayTo

以下是我的快速排序的外观:

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;
}
public int[]arrayToSort={5,1,3,2,2,9};
...
私有void快速排序(int左、int右){
int i=左;
int j=右;
int pivot=arrayToSort[(左+右-左)/2];
而(我){
j--;
}

如果(i这条线几乎肯定是错的

(left + right - left) / 2

 right / 2
很可能是这样

 left + (right - left) / 2
甚至可能

 (left + right) >>> 1
就像JDK中的一样


我不知道如何使用调试器来帮助我


在调试器中,如果不将
mid
放入变量或表达式中,就很难看到它被错误计算。

为什么您认为不应该得到
StackOverflowerError
?“我不确定如何使用调试器来帮助我。”好的,你可以进入并通过你的代码来了解发生了什么…我确信它只是在几次递归调用之后爆炸的…仔细检查你的退出条件。啊,snap-我现在可以通过我的调试器看到这一点,我想我需要更熟悉它。谢谢。@eyesenberg在这种情况下,使用调试器并不像使用r那么明显阅读代码