題目:
輸入一個整數數組,實現函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有的偶數位於數組的後半部分。
答案:
頭尾各一個指針,
若頭部指針指向的是奇數,則後移;指向偶數時停止移動
若尾部指針指向的是偶數,則前移;指向奇數時停止移動
交換頭尾指針指向的數字。
public void adjustArray(int[] array) {
if (array == null || array.length == 0) {
return;
}
int start = 0;
int end = array.length - 1;
while (start < end) {
//若頭部指針指向的是奇數,則後移;指向偶數時停止移動
while (start < end && isOddNum(array[start])) {
start++;
}
//若尾部指針指向的是偶數,則前移;指向奇數時停止移動
while (start < end && !isOddNum(array[end])) {
end--;
}
//交換頭尾指針指向的數字。
if (start < end) {
replace(array, start, end);
}
}
}
/**
* 是否奇數
* @return
*/
private boolean isOddNum(int num) {
if ((num & 1) == 1) {
return true;
}
return false;
}
private void replace(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}