剑指offer---13---(排序,快排思想)---调整数组顺序使奇数位于偶数的前面

 
 
题意
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。相对位置不改变。
 
分析
思路1:
因为偶数都要放到最后面去,所以出现一个偶数就放到最后,同时移动剩余的部分往前一位,这样能够保证相对位置不发生改变。O(n^2)
思路2:
先找到一个偶数,偶数要往后面放嘛,所以从偶数开始往后面找奇数,找到了就把奇数提前放在偶数的位置,因为找到的奇数是该偶数之后第一个奇数,所以奇数和偶数之间都是必须后移动一位的。
 
 
代码:
public class Solution {
    public void reOrderArray(int [] array) {
        if (array == null || array.length <= 1) return;
        
        int first = 0;
        int second = 0;
        //这边为什么使用while不用for,因为不是一步一步跳的,而是可以直接到末尾的。while用于不断后移动的操作。
        while (first < array.length) {
            while (first < array.length && isOdd(array[first])) {
                first ++;
            }
            if (first >= array.length - 1) {
                break;
            }
            second = first + 1;
            while (second < array.length && !isOdd(array[second])) {
                second ++;
            }
            if (second > array.length - 1) {
                break;
            }
            int temp = array[second];
            for (int i = second - 1; i >= first; i--) {
                array[i + 1] = array[i];
            }
            array[first] = temp;
        }
    }
    
    public boolean isOdd(int num) {
        return (num & 1) == 1;
    }
}
posted @ 2018-07-27 13:06  buptyuhanwen  阅读(218)  评论(0编辑  收藏  举报