调整数组顺序使奇数位于偶数前面

你快乐吗?

Posted by bbkgl on September 26, 2019

调整数组顺序使奇数位于偶数前面

C++,数组考点。

思路:

  1. 维护一个范围[left, right],在范围里从左到右扫描,直到碰到的第一个奇数odd_num,然后让扫描到的偶数都右移一个位置。最后将范围左端赋值为odd_num;
  2. 修改范围为[left+1, right];
  3. 重复第一步。

代码如下:

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        dfs(array, 0, array.size() - 1);
    }
    
    void dfs(vector<int> &array, int left, int right) {
        if (left > right) return ;
        int odd = left;
        for ( ; odd <= right && array[odd] % 2 != 1; odd++) ;
        if (odd > right) return ;
        else {
            int t = array[odd];
            while (odd > left) {
                array[odd] = array[odd - 1];
                odd--;
            }
            array[left] = t;
        }
        dfs( array, left + 1, right);
    }
};