-2

どうやら sort メソッドが原因で stackoverflowerror が発生しているようです。なんで?

    public static void quickSort(int[] a, int low, int high) {
        if (a.length > 1) {
            int middle = a.length / 2;
            int size = a.length - middle;
            int pivot = a[middle];

            sort(a, low, middle, high);
            quickSort(a, low, middle);
            quickSort(a, middle + 1, high);
        }
    }

    public static void sort(int[] a, int low, int middle, int high) {
        boolean b = true;

        int i = low;
        int j = high;
        for (int x = 0; x < middle + 1; x++)
            if (a[x] <= a[middle])
                i++;
        for (int x = middle + 1; x < high + 1; x++)
            if (a[x] > a[middle])
                j--;
        if (i != middle && j != middle + 1) {
            int temp = a[i];
            a[i] = a[j];
            a[j] = temp;
            b = false;
        }
        if (b == false)
            sort(a, low, middle, high);
        return;
    }
}
4

1 に答える 1

0

ここでソート機能に注意してください。

if (b == false) {
  sort(a, low, middle, high);
}

この b は常に false です。低、中、高の値は変更しません。そのため、ソート関数呼び出しはそのまま再帰的です。そのため、まったく変化がなく、関数呼び出しの繰り返しとスタックオーバーフローが発生します。

于 2013-11-12T07:44:20.917 に答える