面试题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));
    }
}
上一篇下一篇

猜你喜欢

热点阅读