题目
输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分。
解决方案
这类问题的处理思路可以考虑:头尾指针
数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初始化时候指向数组尾部,第一个指针指向的数字总是偶数,第二个指针指向的数字总是奇数,如果第一个指针在第二个指针之前,则交换两指针指向的元素。
public class Solution {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Solution.reorderArray(array);
System.out.println(Arrays.toString(array));
}
public static void reorderArray(int[] array) {
if (array == null || array.length <= 0)
throw new RuntimeException("invalid array");
int begin = 0;
int end = array.length - 1;
while (begin < end) {
while (begin < end && (array[begin] & 1) != 0) {
//奇数
begin++;
}
while (begin < end && (array[end] & 1) == 0) {
//偶数
end--;
}
if (begin < end) {
int temp = array[end];
array[end] = array[begin];
array[begin] = temp;
}
}
}
}