アルゴリズムを改善しなければならない演習があります。このアルゴリズムは配列を取り、偶数を左側 (SORTED) に、オッズを右側 (NOT-SORTED) に配置します。アルゴリズムが非効率なので、改善する必要があります。
これは、私が「改善」しなければならない、演習の元のコードです。
public void what (int [] arr) {
int temp;
for (int i=0; i<arr.length; i++)
if (arr[i]%2 == 0) {
temp = arr[i];
for (int j=i; j>0; j--)
arr[j] = arr[j-1];
arr[0] = temp;
}
}
この演習でクイックソートアルゴリズムを実装したかったのですが、問題はピボットの使用方法がわからないことです。通常、ピボットは中央値であり、配列の数字の半分は小さく、残りの半分は大きくなります。
ここでの問題は、左側の部分が偶数で、右側の部分がオッズでなければならないことです。
この「並べ替え」を O(n^2) 未満の効率で実装する必要があります。
何か案は?
ありがとうございました!