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

时间:2015-10-05 15:57:10

标签: 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 (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。问题是什么?不知道如何使用调试器来帮助我。

提前致谢

1 个答案:

答案 0 :(得分:1)

这条线几乎肯定是错的。

(left + right - left) / 2

相同
 right / 2

最有可能是

 left + (right - left) / 2

甚至可能

 (left + right) >>> 1

就像在JDK中一样。

  

我不确定如何使用调试器来帮助我。

在调试器中,如果mid被错误地计算而没有将其放入变量或表达式中,则更难以看到。