剑指Offer面试题14
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
分析:
1、可以维护两个指针
2、一个指针初始化时指向数组的第一个数字,它只向后移动;
3、第二个指针初始化时指向数组的最后一个数字,它只向前移动。
4、在两个指针相遇之前,第一个指针总是位于第二个指针的前面。
5、如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,我们就交换这两个数字。
class Solution {
public:
void reOrderArray(vector<int> &array)
{
int len = array.size();
if(len == 0)
return;
int begin = 0;
int end = len - 1;
while(begin < end)
{
while(begin < end && ((array[begin] & 1) != 0))
{
begin++;
}
while(begin < end && ((array[end] & 1) == 0))
{
end--;
}
if(begin < end)
{
int temp = array[begin];
array[begin] = array[end];
array[end] = temp;
}
}
}
};