我正在尝试编写一个程序,该程序使用递归和快速排序(如分区)来查找第 k 个最小元素,以便不必对整个数组进行排序。我觉得我的代码应该可以工作,但是在调用该函数时我立即收到堆栈溢出错误,因此我无法对其进行测试。
我认为堆栈溢出与溢出执行堆栈有关,我理解它与递归有关,但错误在函数的第一行被调用,所以我很困惑。如果有人可以看看这个并提出一些建议,我将不胜感激。谢谢。
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;