题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
【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;});
}
};