Quicksort中的StackOverflow

时间:2018-05-31 17:34:23

标签: java stack-overflow quicksort

如果我使用numbers.length n = 100.000("。"只是为了可读性)尝试此代码,我得到一个Stackoverflow,并且数字按逆序排列,如100.000 99.999 99.998 ..那是正常的吗?它适用于较小的n,如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 :(得分:0)

您可能正在进行过多的递归调用,因为数组已经排序。您可以允许JVM使用更多内存或更改最大递归深度。更好的解决方案是实现非递归快速排序。这是一个Java example