题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
考察点:数组的了解,以及二分思想。
思路:遍历数组,找到奇数,就往后移动奇数前面的数字,设置一个变量标记第一个偶数出现的下标。
class Solution {
public:
void reOrderArray(vector<int>& array) {
if (array.size() == 0||array.size()==1)
return;
int pos; //记录第一次出现偶数的下标
for (int i = 0; i < array.size(); i++)
{
if (array[i] % 2 == 0)
{
pos = i;
break;
}
}
for (int i = 0; i < array.size(); i++)
{
if (array[i] % 2 == 1) //出现奇数,就往后移动数据
{
int value = array[i];//保留当前数值
for (int j = i;j>pos; j--) //循环移动
array[j] = array[j-1];
if (i > pos) //保证遍历下标在第一次出现的偶数下标后面
{
array[pos] = value;
pos++; //移动结束,第一个偶数的下标肯定是往后移动一位
}
}
}
}
};