0
我想在ArrayList上實現QuickSort算法。但是,我得到一個實現QuickSort時StackOverflowError
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);
}
沒有看你的代碼,這聽起來像是計算遞歸的錯誤索引值。在調試器中運行,並確保你沒有被卡住的索引對絆倒。 – chrylis
它說第36行存在錯誤,但它沒有寫入也沒有寫出主要方法 – iShaalan
調用'quickSort'時'toIdx'的作用是什麼?遞歸排序的索引範圍是什麼? for循環中'i'的值的範圍是多少? – rici