StackOverflow в быстрой сортировке - PullRequest
0 голосов
/ 31 мая 2018

Я получаю Stackoverflow, если попробую этот код с numbers.length n = 100.000 ("." Только для удобства чтения) и числами в обратном порядке, например 100.000 99.999 99.998 ... Это нормально?Это работает для меньшего п, как 10.000.

private void quickSort(int[] numbers, int l, int r) {
    if (l < r) {
      int p = numbers[r];
      int i = l - 1;
      int j = r;
      do {
        do {
          i++;
        } while (numbers[i] < p);
        do {
          j--;
        } while (j >= l && numbers[j] > p);
        if (i < j) {
          swap(numbers, i, j);
        }
      } while (i < j);
      swap(numbers, i, r);
      quickSort(numbers, l, i - 1);
      quickSort(numbers, i + 1, r);
    }
  }

1 Ответ

0 голосов
/ 31 мая 2018

Возможно, вы делаете слишком много рекурсивных вызовов, потому что массив уже отсортирован.Вы можете разрешить JVM использовать больше памяти или изменить максимальную рекурсивную глубину.Лучшее решение - реализовать нерекурсивную быструю сортировку.Вот пример Java .

...