题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目分析
题目不难,最简单的方法,将顺序查找奇数与偶数,分别放到不同的数组中,再拼接到同一个数组中就可以了。
class Solution {
public:
void reOrderArray(vector<int> &array) {
unsigned int i_length = array.size();
vector<int> odd_array;
vector<int> even_array;
for(unsigned int i = 0;i < i_length;i++)
{
if(array[i] % 2)
odd_array.push_back(array[i]);
else
even_array.push_back(array[i]);
}
array.clear();
i_length = odd_array.size();
for(unsigned int i = 0;i < i_length;i++)
{
array.push_back(odd_array[i]);
}
i_length = even_array.size();
for(unsigned int i = 0;i < i_length;i++)
{
array.push_back(even_array[i]);
}
}
};
第二种思路:数组位移,不使用额外的空间。
class Solution {
public:
void reOrderArray(vector<int> &array) {
//思路二,不是奇数,就是偶数,所以调整为只查找奇数位置就可
unsigned int i_length = array.size();
unsigned int tag = 0;
for(unsigned int i = 0;i<i_length;i++)
{
if(array[i] % 2)
{
int temp = array[i];
//如果找到奇数,就将其前边的元素后移一位,并将其放在开头的奇数队列
for(unsigned int j = i;j > tag ;j--)
{
array[j] = array[j-1];
}
array[tag] = temp;
tag++;
}
}
}
}