配列
最後にもう一つだけお願いします。ずっと格闘しても解決できません・・
配列の中の数字で、偶数を全て奇数の前にもって行きます
例)
{1,0,1,0,0,1,1} → {0,0,0,1,1,1,1}
{3,3,2} → {2,3,3}
{2,2,2} → {2,2,2}
流れとしては、まず奇数の数を数えます。これは何回シフトするから知るためです。
配列0から奇数を探し、あればそれを一番最後の配列へとシフトします。
奇数を探す作業が一度終わっても、まだシフトさせないといけない奇数があるかもしれないので(奇数が連続で並んでる場合)、最初に数えた奇数の数分だけちゃんとシフトするようにしようと思います。
public void evensLeft(int[] array) {
int odd=0;
for (int i = 0; i < array.length; i++) {
if(array[i]%2!=0)
odd++; //奇数の個数
}
while (odd>0) { //奇数分シフトするためのカウント
for(int j=0;j<array.length;j++){ //奇数を探す
if (array[j] % 2 != 0) {
odd--; //奇数のカウントを1減らす
for (int k = j; k < array.length-1; k++) { //その奇数を一番最後に移動
int temp = array[k+1];
array[k+1] = array[k];
array[k] = temp;
}
}
}
}
return array;
}
いくつかの例では動くのですが、{3,3,2}の例だと配列0に3が来てしまいます。色々変えてみても結果無理でした・・・
どなたかご教授お願いします。