Я пытаюсь реализовать алгоритм QuickSort на ArrayList. Тем не менее, я получаюStackOverflowError при реализации QuickSort
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
Какова роль 'toIdx' в вызове' quickSort'? Каков диапазон рекурсивно отсортированных индексов? Каков диапазон значений 'i' в цикле for? – rici