在我的代碼中,該方法將自己調用(遞歸)。我們知道,深度方法調用會導致堆棧溢出。那麼,當數據量很大時會發生堆棧溢出嗎?QuickSort能否堆棧溢出?
我的快速排序代碼:(內部類排序類)
private static class QuickSortor extends Sortor {
protected <E> void sort(E[] a, boolean isAsc) {
quickSort(a, 0, a.length - 1, isAsc);
}
private <E> void quickSort(E[] a, int left, int right, boolean isAsc) {
if (left >= right)
return;
int middle = left;
Comparable<E> cmp = (Comparable<E>) a[left];
for (int i = left + 1; i <= right; i++) {
int result = cmp.compareTo(a[i]);
if (!isAsc)
result = -result;
if (result >= 0)
swap(a, ++middle, i);
}
swap(a, left, middle);
quickSort(a, left, middle - 1, isAsc);
quickSort(a, middle + 1, right, isAsc);
}
}
您是否嘗試過分析堆棧深度複雜性?你會通過這樣做找到答案。 – nhahtdh
這幾乎肯定是無限遞歸。若要在正確的函數中導致堆棧溢出,將需要一個_massive_數組,因此聽起來不太可能。檢查一個錯誤,因爲這可能是原因。 – Oleksi
考慮樞軸(不幸)總是被選爲最小或最大元素的情況。然後你會有一個深度的O(n)調用... – Mysticial