输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
void reOrderArray(vector<int> &array) {
vector<int> odds;//存放所有基数的数组,可以保证相对位置不变
vector<int> even;
for (int i = 0; i < array.size(); i++)
{
if (array[i] % 2 != 0)
odds.push_back(array[i]);
else if (array[i] % 2 == 0)
even.push_back(array[i]);
}
for (int i = 0; i < odds.size(); i++)//将基数倒回原来数组中
array[i] = odds[i];
for (int i = 0; i < even.size(); i++)//将偶数按照顺序放到最后
array[odds.size()+i] =even[i];
}
若相对位置没有规定的话;
bool iseven(int n)
{
return (n & 1) == 0;//若n为偶数,返回0
}
void reOrderArray1(vector<int> &array)
{
if (array.size() == 0 || array.empty())
return;
int pbegin =0;
int pend =array.size()-1;
while (pbegin < pend)
{
while (pbegin < pend && !iseven(array[pbegin]))
pbegin++;
while (pbegin < pend && iseven(array[pend]))
pend--;
if (pbegin < pend)
swap(array[pbegin], array[pend]);
}
}