题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:维护两个指针,第一个指针初始指向数组第一个数字,只向后移动;第二个之后初始指向最后一个数字,只向前移动。在两个指针相遇前,第一个指针向后移动找到偶数,第二个指针向前移动找到奇数,两者交换,继续移动。
java实现:
public static void reOrderArray(int[] array) {
if(array.length<=0) return;
int i=0;
int j=array.length-1;
while(i<j) {
while(i<j&&(array[i]%2!=0)) {
i++;
}
while(i<j&&(array[j]%2==0)) {
j--;
}
if(i<j) {
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
//把判断奇偶条件解耦
public static void reOrderArray2(int[] array) {
if(array.length<=0) return;
int i=0;
int j=array.length-1;
while(i<j) {
while(i<j&&(!func(array[i]))) {
i++;
}
while(i<j&&(func(array[j])) ){
j--;
}
if(i<j) {
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
}
public static boolean func(int num) {
return (num & 1)==0;
}