配列全体をソートする必要がないように、再帰とパーティショニングのようなクイックソートを使用して 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;