一个数组有奇数也有偶数,把所有奇数放到数组的左边,所有偶数移到数组的右边
解法比较简单,从左边找到第一个偶数,再从右边找到第一个奇数,两者交换。类似是快速排序的实现
public class OddEvenDivide {
public static void main(String[] args) {
int [] a={5,10,26,32,41,7,9,8,4,12,1};;
System.out.println(divideOddEven(a));
for(int k:a)System.out.print(k+" ");
}
//返回值是奇数的个数
public static int divideOddEven(int [] a){
int i,j;
for(i=0,j=a.length-1;i<j;i++,j--){
//从左到数找到第一个偶数
while(i<j){
if(isOdd(a[i]))i++;
else break;
}
//从右往左找,找到第一个奇数
while(i<j){
if(isOdd(a[j]))break;
else j--;
}
//交换
swap(a,i,j);
}
return i+1;
}
//交换数组中的两个元素的值
private static void swap(int[] a, int i, int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
//判断一个数是否为奇数
private static boolean isOdd(int i) {
// TODO Auto-generated method stub
return 1==(i&0x01);//二进制最后一位为1的就是奇数
}
}