调整数组顺序使奇数位位于偶数位前面
时间限制:1秒 空间限制:32768K
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目分析
(1)从后往前遍历,
(2)定义一个iEven和iOdd变量,分别记录当前遍历到的最左边的偶数位置和最左边的奇数位置。
(3)当遍历的数为偶数时,判断iEven是否相等,相等则将iEven和iOdd均减1,然后继续遍历下一个元素,否则将其右边的奇数依次往前挪一个位置,并将偶数放到iEven
(4)当遍历的数为奇数时,iOdd减1
(5)循环直到遍历所有元素。
代码实现
class Solution {
public:
void reOrderArray(vector<int> &array) {
int iEven, iOdd;
iEven = array.size() - 1;
iOdd = iEven;
for (int i = array.size() - 1; i >= 0; i--)
{
if (array[i] % 2 == 0)
{
if (iEven != iOdd)
{
int iTemp = array[i];
for (int j = iOdd; j < iEven; j++)
{
array[j] = array[j + 1];
}
array[iEven] = iTemp;
iEven--;
iOdd--;
}
else
{
iEven--;
iOdd--;
}
}
else
{
iOdd--;
}
}
}
};