Java 在实现快速排序时出现StackOverflower错误
我正在尝试在ArrayList上实现一个快速排序算法。然而,我得到了一份工作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
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
的值范围是什么?