配列内のn個の最小項目を決定するコードを記述しようとしています。私はこれで苦労していることは悲しいことです。今日の私の大学の教科書のアルゴリズムに基づいて、これは正しいと思われる。しかし、私はスタックオーバーフローの例外を与えるので、明らかに私は間違って何かをしています。Quickselectの実装が機能しない
私のアプローチがある:
この位置で整数を使用- 私は反復
- にすべてを比較すると、物事がソートされているように、このピボットの周りのすべてを入れ替えるピボット(ピボットにソートされた相対的な)
- n個の場合==ピボットであることを、私は、私はそうでない
- を行っていますだと思います私は4つのsmallesをしたい場合t要素とピボットは3です。たとえば、右側(または、2番目に小さい要素が必要な場合は左側)を調べる必要があります。
-
public static void main(String[] args) {
int[] elements = {30, 50, 20, 10};
quickSelect(elements, 3);
}
private static int quickSelect(int[] elements2, int k) {
return quickSelect(elements2, k, 0, elements2.length - 1);
}
private static int quickSelect(int[] elements, int k, int start, int end) {
int pivot = start + (end - start)/2;
int midpoint = elements[pivot];
int i = start, j = end;
while (i < j) {
while (elements[i] < midpoint) {
i++;
}
while (elements[j] > midpoint) {
j--;
}
if (i <= j) {
int temp = elements[i];
elements[i] = elements[j];
elements[j] = temp;
i++;
j--;
}
}
// Guessing something's wrong here
if (k == pivot) {
System.out.println(elements[pivot]);
return pivot;
} else if (k < pivot) {
return quickSelect(elements, k, start, pivot - 1);
} else {
return quickSelect(elements, k, pivot + 1, end);
}
}
編集:あなたは、有効な質問をdownvoteするつもりなら、少なくとも、なぜわざわざコメントしてください。
有効な質問をdownvoteするつもりなら、少なくとも、なぜわざわざコメントしてください。 – Beebunny