输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
interesting,我几乎很少碰到这样子的问题,但是感觉这种题也挺好。大致梳理一下解题思路:
我们要做的是遍历整个数组,然后记录已排序好了的奇数的最后一个奇数的位置pos,然后在后方发现一个奇数之后,就将之插入到pos后面,然后pos自增。
额,还好吧,都没有多大难度,那还是老规矩,直接贴代码了:
void reOrderArray(vector<int> &array)
{
vector<int>::iterator it_odd = array.begin();
for(vector<int>::iterator it = array.begin();it != array.end(); ++it)
{
if((*it & 0x1) != 0)
{
if(it != it_odd)
{
it_odd = array.insert(it_odd,*it);
++it;
it = array.erase(it);
--it;
}
++it_odd;
}
}
}
哦,值得强调的是,我们使用迭代器时,往容器中插入元素后,迭代器指向的元素是发生了变化的,所以此处的it自增自减都是有必要的