Я пытаюсь закодировать программу, которая находит k-й наименьший элемент, используя рекурсию и быструю сортировку, такую как разбиение на разделы, чтобы не сортировать весь массив. Я чувствую, что мой код должен работать, но я получаю ошибку переполнения стека сразу, когда вызывается функция, поэтому я не могу ее протестировать.Ошибка переполнения стека в Java
Я думал, что переполнение стека связано с переполнением стека выполнения, и я понимаю, что это происходит с рекурсией, но ошибка вызывается в первой строке функции, поэтому меня это смущает. Если кто-то может взглянуть на это и дать некоторые предложения, я бы очень признателен. Благодарю.
public static int find_kth_smallest(int[] A, int n, int k)
{
int[] Left = new int[200];
int[] Right = new int[200];
int half = n/2;
int x = 0; int j = half + 1; int q = 0;
int count = 0;
int pivot = A[half];
for(int i = 0; i < n; i++)
{
if(A[i] < pivot)
{
Left[x] = A[i];
x++;
}
if(A[i] > pivot)
{
Right[j] = A[i];
j++;
}
}
while(Left[q] != 0)
q++;
if(k < q)
{
return find_kth_smallest(Left, q, k);
}
if(k > q)
{
return find_kth_smallest(Right, n-q, k);
}
if(k-1 == q)
{
return A[pivot];
}
return -1;
Каковы значения, которые вы передаете в качестве параметров функций? – Thihara
Непонятно, как вы отлаживали это. Просто вмешательство в метод не должно вызывать проблемы ... –
его умрет на первой строке, если он рекурсивный. Его просто так, что он не первый раз был на первой строке, так много раз повторялся, что закончился из стека –