题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
由于需要保持奇数之间和偶数之间的相对位置不变,每次都要把奇数向前移若干位,复杂度为o(n2),不知道有没有更优的解法。
class Solution {
public:
void reOrderArray(vector<int> &array) {
if(array.size()<=1) {
return ;
}
int index_even=-1;
for(int i=0;i<array.size();i++) {
if(array[i]&0x01) {
if(index_even!=-1) {
int pos=index_even;
int index_odd=i;
while(array[pos]%2==0&&pos>=0) {
int temp=array[index_odd];
array[index_odd]=array[pos];
array[pos]=temp;
index_odd=pos;
pos--;
}
index_even=i;
}
} else {
index_even=i;
}
}
}
};