題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
思路:維護兩個指針,第一個指針初始指向數組第一個數字,只向後移動;第二個之後初始指向最後一個數字,只向前移動。在兩個指針相遇前,第一個指針向後移動找到偶數,第二個指針向前移動找到奇數,兩者交換,繼續移動。
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;
}