Я работаю над внедрением алгоритма QuickSort, который мне нужно нормально работать с размерами массива до 100 000. Как только я попытаюсь сортировать с размером 1 000 000, я получу ошибку переполнения стека (что происходит с моим лучшим пониманием из -за рекурсивной функциональности моего алгоритма).
Я знаю, что этот вопрос был задан на Здесь раньше, но ни один из этих ответов мне вообще не помог. Я широко просмотрел свой код и даже моделировал его из учебника Java, чтобы дважды проверить, все еще не исправляя. И я прочитал, что стек вызовов может удерживать до 8 МБ или около того в зависимости от системы. Мне интересно, если: < /p>
Мой алгоритм неверен < /li>
1 000 000 Элементы слишком велики, чтобы использовать для быстрого сорта (с помощью этого компилятора). < /li>
< /ul>
Изменить: всем, кто заинтересован: я обнаружил, что увеличение моего случайного интервала с 1-9 до 1-N ( n Размер сортируемой последовательности, пример: 1-1000000), мой QuickSort работал очень быстрее, и, конечно, не было проблем с переполнением.
i Я собираюсь отправить свой код сейчас с драйвером, и, надеюсь, кто -то сможет быстро показать мне, где я ошибся. < /p>
public class QuickSort {
public static void main(String[] args) {
//JUST TO TEST THAT IT WORKS
int[]A = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; //worst case
quickSort(A, 0, A.length-1);
//print the array
for (int a :A)
System.out.print(a+" ");
System.out.println();
}
/**
* Quicksort algorithm, O(n log n) best and average case, O(n^2) worst case
* @param S sequence to sort
* @param a the lower bound of sequence
* @param b upper bound of sequence
*/
public static void quickSort(int[]S, int a, int b) {
if (a >= b)
return;
int p = S; //setting pivot to the last element in sequence
int l = a;
int r = b - 1;
int temp;
while (l
Подробнее здесь: https://stackoverflow.com/questions/489 ... nct-values