输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
可以新建两个数组,但是这样的话空间复杂度太高,所以可以一边找一边移动:
找到第一个奇数,那么它前面的全是偶数,那么就用类似插入排序的方式把这个奇数换到最前面即可,如此下去,没找到一个奇数,变进行交换。
void reOrderArray(vector<int> &array) {
int i;
int n = array.size();
int j = 0;
for (i = 0; i < n; ++i)
{
if(array[i] & 1)
{
for (int g = i - 1; g >= j; --g)
{
int t = array[g+1];
array[g+1] = array[g];
array[g] = t;
}
j++;
}
}
}