题目:
输入一个整数数组,实现函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。
答案:
头尾各一个指针,
若头部指针指向的是奇数,则后移;指向偶数时停止移动
若尾部指针指向的是偶数,则前移;指向奇数时停止移动
交换头尾指针指向的数字。
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;
}