Java 在实现快速排序时出现StackOverflower错误

Java 在实现快速排序时出现StackOverflower错误,java,algorithm,stack-overflow,quicksort,Java,Algorithm,Stack Overflow,Quicksort,我正在尝试在ArrayList上实现一个快速排序算法。然而,我得到了一份工作 Exception in thread "main" java.lang.StackOverflowError at sorting.QuickSort.quickSort(QuickSort.java:25) at sorting.QuickSort.quickSort(QuickSort.java:36) at sorting.QuickSort.quickSort(QuickSort.ja

我正在尝试在ArrayList上实现一个快速排序算法。然而,我得到了一份工作

Exception in thread "main" java.lang.StackOverflowError
    at sorting.QuickSort.quickSort(QuickSort.java:25)
    at sorting.QuickSort.quickSort(QuickSort.java:36)
    at sorting.QuickSort.quickSort(QuickSort.java:36)
    at sorting.QuickSort.quickSort(QuickSort.java:36)
    at sorting.QuickSort.quickSort(QuickSort.java:36)
    ...
我不知道为什么会出现溢流。以下是我的实施:

public static void quickSort(ArrayList<Integer> al, int fromIdx, int toIdx) {
    int pivot, pivotIdx;

    if (fromIdx < toIdx) {
        pivot = al.get(fromIdx);
        pivotIdx = fromIdx;

        for (int i = 0; i != (fromIdx + 1); i++) {
            if (al.get(i) <= pivot) {
                pivotIdx += 1;
                swap(al, pivotIdx, i);
            }
        }

        swap(al, fromIdx, pivotIdx);
        quickSort(al, fromIdx, pivotIdx - 1);
        quickSort(al, pivotIdx + 1, toIdx);
    }
}

public static void swap(ArrayList<Integer> al, int xIdx, int yIdx) {
    Integer temp = al.get(xIdx);
    al.set(xIdx, al.get(yIdx));
    al.set(yIdx, temp);
}
publicstaticvoidquicksort(arraylistal,int-fromIdx,int-toIdx){
int-pivot,pivotIdx;
if(从idx如果(al.get(i)尝试将数组的块从
从idx
排序到
toIdx
,则永远不应查看元素0,除非它位于该块中。但您的实现确实如此


<> P>你中间的索引技巧也有点奇怪。我强烈建议你做一个剪裁小片纸的练习,在一张纸上写跟踪信息,这样你就可以通过算法进行跟踪。如果你在物理上做了,你看它没有意义,那么在CO中就没有意义了。拿着一张纸的行为可能看起来很愚蠢,但对准确地可视化你正在做的事情有很大帮助。(你越能准确地可视化你的代码实际做了什么,你就越有可能找出它是否做错了。)

如果不查看代码,这听起来像是计算递归索引值时出错。请在调试器中运行,确保没有被卡住的索引对绊倒。它说第36行有错误,但没有编写,也没有编写主方法调用
toIdx
的作用是什么ode>quickSort
?递归排序的索引范围是什么?for循环中
i
的值范围是什么?