题目链接

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:

【1】容易想到的是新开辟一个vector,先放奇数,后放偶数

【2】类似冒泡排序思想,如果时前偶后奇的情况交换

【3】STL的stable_partition()函数,类似【1】

代码【1】:

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int>tmp;
        for(auto x: array) {
            if((x&1)==1) {
                tmp.push_back(x);
            }
        }
        for(auto x:array) {
            if((x&1)==0) {
                tmp.push_back(x);
            }
        }
        array=tmp;
    }
};

代码【2】:

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        for(int i=0; i<array.size(); i++) {
            for(int j=array.size(); j>i; j--) {
                if((array[j]&1) && (array[j-1]&1)==0) {
                    swap(array[j],array[j-1]);
                }
            }
        }
    }
};

代码【3】:

/**
用的STL stable_partition 这个函数

*/
class Solution {
public:
    void reOrderArray(vector<int> &array) {
        stable_partition(array.begin(), array.end(), [](int i){return i % 2 == 1;});
    }
};