Я знаю, что об этом много спрашивали, но я не мог понять свою проблему.
Я пытаюсь понять сложность времени, но я получаю эту ошибку:
Исключение в потоке "основной" java.lang.StackOverflowError
at MedianAlgorithm2.Select (MedianAlgorithm2.java:22)
когда я передаю размер массива> 100000.
и метод рекурсивного выбора следующим образом:
public static int Select(int[] A, int l, int m, long h) {
int pos = Partition(A, l, h);
if (pos == m) {
return A[pos];
}
if (pos > m) {
return Select(A, l, m, pos - 1);
}
if (pos < m) {
return Select(A, pos + 1, m, h); // this is line 22 mentiond in exception
}
return 0;
}
public static int Partition(int[] A, int l, long h) {
int pivotval = A[l];
int pivotloc = l;
for (int j = l+1; j <= h; j++) {
if (A[j] < pivotval) {
pivotloc = pivotloc + 1;
int temp = A[pivotloc];
A[pivotloc] = A[j];
A[j] = temp;
}
}
int temp = A[l];
A[l] = A[pivotloc];
A[pivotloc] = temp;
return pivotloc;
}
Я изменил h с int на long, но все еще получаю сообщение об ошибке
Спасибо.