簡體   English   中英

Quicksort中的StackOverflow

[英]StackOverflow in Quicksort

如果我嘗試使用Numbers.length n = 100.000(“。”僅出於可讀性)且這段代碼是相反的順序(例如100.000 99.999 99.998),那我就會得到Stackoverflow ...這正常嗎? 它適用於較小的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);
    }
  }

您可能進行了太多的遞歸調用,因為該數組已經排序。 您可以允許JVM使用更多的內存或更改最大遞歸深度。 更好的解決方案是實現非遞歸快速排序。 這是一個Java 示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM