题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
1、从数组起始位置,检测该数是否为偶数(使用&运算,eg:若某数为偶数,则a[i]&1=0);
2、若为奇数,则该数位置不变;若为偶数,则将接下来出现的第一个奇数移到该位置,该偶数后面的数(直到移到该奇数的位置为止)依次往后移一位。
代码:
public class Solution {
public void reOrderArray(int [] array) {
int flag=-1;
int i=0;
while(i<array.length){
if((array[i]&1)==0){
if(i==0){
flag=0;
}
if(flag<0){
flag=i;
}
i++;
continue;
}else{
if(flag>=0){
int mid=array[i];
for(int j=i;j>flag;j--){
array[j]=array[j-1];
}
array[flag]=mid;
flag++;
}
i++;
continue;
}
}
}
}