题目思路:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
例如:{1, 2, 3, 4, 5, 6, 7} 调整后为:{1, 3, 5, 7, 2, 4, 6}。
解题思路:
根据插入排序的方法将奇数插到数组前面,偶数移动到后面。
class Solution {
public:
void reOrderArray(vector<int> &array)
{
int len = array.size();
if(0 == len) //代码的鲁棒性
return;
int i = 0;
int j = len - 1;
while(i < len)
{
if((array[i]&1) == 1) //若是奇数
{
int j = i - 1; //向前寻找偶数
int tmp = array[i];
while(j >= 0)
{
if(array[j]&1 == 1)
break;
array[j+1] = array[j];
j--;
}
array[j+1] = tmp;
}
i++;
}
}
};
还有一种方法就是跟冒泡排序类似
class Solution {
public:
void reOrderArray(vector<int> &array)
{
int len = array.size();
int i, j;
for(i=0; i<len-1; i++)
{
for(j=len-1; j>i; j--)
{
//前偶后奇
if(!(array[j-1]&1) && array[j]&1)
{
array[j] = array[j]^array[j-1];
array[j-1] = array[j]^array[j-1];
array[j] = array[j]^array[j-1];
}
}
}
}
};