解题思路:用快排的思想
(双指针扫描) O(n)O(n)
用两个指针分别从首尾开始,往中间扫描。扫描时保证第一个指针前面的数都是奇数,第二个指针后面的数都是偶数。
每次迭代时需要进行的操作:
第一个指针一直往后走,直到遇到第一个偶数为止;
第二个指针一直往前走,直到遇到第一个奇数为止;
交换两个指针指向的位置上的数,再进入下一层迭代,直到两个指针相遇为止;
/*
* 2个指针,一个从前往后,遍历元素是不是奇数。不满足条件跳出while循环,输出当前
* 元素的下标i
* 一个从后往前查元素是不是偶数。不满足条件跳出while循环,输出当前元素的下标j
* 当两个while都不执行的时候,进行数组元素的交换。
*
* /
class Solution {
public:
void reOrderArray(vector<int> &array) {
int i = 0,j=array.size()-1;
while(i <= j && array[i] % 2 == 1) //
{
i++;
}
while(i <= j && array[j] % 2 == 0)
{
j++;
}
if(i < j) swap(array[i],array[j]);
}
};
原文:https://www.cnblogs.com/make-big-money/p/12304721.html