问题描述
给定一个数组,将其偶数元素放到奇数元素的后面
输入 {2,4,1}
输出{1,2,4}
输出后,元素的顺序不用关心,只要所有奇数元素在偶数元素之前
线性时间完成
代码
/*
思路:定义两个指针分别指向头尾,然后向中间遍历
两个指针指向的元素前为偶数后为奇数就交换
都为偶数后指针--,都为奇数前指针++;
前为奇数后为偶数一起向中间走
*/
void Replace(vector<int>&vec)
{
int i = 0;
int j = vec.size() - 1;
int tmp;
while (i < j)
{
if (vec[i] % 2 == 0 && vec[j] % 2 != 0)
{
tmp = vec[i];
vec[i++] = vec[j];
vec[j--] = tmp;
}
else if (vec[i] % 2 != 0 && vec[j] % 2 != 0)
{
i++;
}
else if (vec[i] % 2 == 0 && vec[j] % 2 == 0)
{
j--;
}
else
{
i++;
j--;
}
}
}
int main()
{
vector<int>vec = { 23,45,9,3,5,2,6,8,4,1,6,4,5,8,4,5,6,3,2,1,6,5,4,8,9,6,2 };
Replace(vec);
for (int val : vec)
{
cout << val << " ";
}
cout << endl;
getchar();
return 0;
}