输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
方法一:
void reOrderArray(vector<int> &array) {
vector<int> tempEven;
vector<int> tempadd;
for(auto i: array){
if(i%2== 0){
tempEven.push_back(i);
}else{
tempadd.push_back(i);
}
}
array.clear();
for(auto i: tempadd){
array.push_back(i);
}
for(auto i: tempEven){
array.push_back(i);
}
}
测试一:
方法二:
void reOrderArray(vector<int> &array) {
for(int i = 0;i < array.size();++i){
if(array[i]%2 ==1){
continue;
}
// 找出偶数
for(int j = i+1;j<array.size();++j){
// 找出偶数后第一个奇数
if(array[j]%2 == 0){
continue;
}
array[j]^= array[i];
array[i]^= array[j];
array[j]^= array[i];
// 交换
for( int k = j;k>i+1;--k){
array[k] ^= array[k-1];
array[k-1] ^= array[k];
array[k] ^= array[k-1];
}
break;
}
}
}
测试二: