调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
版本一: 利用插入排序, 所不同的是多一个if条件判断
class Solution {
public:
void reOrderArray(vector<int> &array) {
int inner = 0;
int outer = 0;
long temp = 0;
if (array.empty()) {
return;
}
for (outer = 1; outer < array.size(); outer++) {
//if ((array[outer] + 1) % 2) { // 最开始写成这个版本了, 见下图
if ((array[outer]) % 2) {
temp = array[outer];
inner = outer;
while ((inner > 0) && (0 == array[inner - 1] % 2)) {
array[inner] = array[inner - 1];
inner--;
}
array[inner] = temp;
}
}
}
};
版本二: 条件判断拓展, 剑指offer中的条件拓展, 奇偶判断是亮点
class Solution {
public:
bool isEven(int number) {
return (number & 1) == 0;
}
void reOrderArray(vector<int> &array) {
int inner = 0;
int outer = 0;
long temp = 0;
if (array.empty()) {
return;
}
for (outer = 1; outer < array.size(); outer++) {
if (! isEven(array[outer])) {
temp = array[outer];
inner = outer;
while ((inner > 0) && isEven(array[inner-1])) {
array[inner] = array[inner - 1];
inner--;
}
array[inner] = temp;
}
}
}
};