面试题21:调整数组顺序使奇数位于偶数前面
2019-10-07 本文已影响0人
scott_alpha
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:构建两个指针P1和P2,P1指向数组头部,P2指向数组尾部。P1向后移动,遇到偶数停下来,P2向前移动,遇到奇数停下来,最后交换P1和P2的数字。重复如上操作,直至P1小于P2。
解决方案:
public class Question21 {
private static boolean isEvent(int n){
return (n & 1) == 0;
}
public static void Reorder(int[] data, int length){
if (data == null || length == 0){
return;
}
int begin = 0;
int end = length - 1;
while (begin < end){
while (begin < end && !isEvent(data[begin])){
begin++;
}
while (begin < end && isEvent(data[end])){
end--;
}
if (begin < end){
int tmp = data[begin];
data[begin] = data[end];
data[end] = tmp;
}
}
}
public static void main(String[] args) {
int[] data = new int[]{1,2,3,4,5};
Reorder(data, data.length);
System.out.println(Arrays.toString(data));
}
}