#include "myHead.h"
/**
调整数组顺序,使得奇数全部放左边,偶数全部放右边,不考虑原来数组中的奇(偶)数之间相对顺序
*/
int condition(int x);
void reOrderArray(vector<int> &array) {
int i = 0,j=array.size()-1,temp;
while(i<j){
while(i<j && condition(array[i]) )
i++;
while(i<j && !condition(array[j]))
j--;
if(i<j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
//求奇数偶数,用位运算加速
int condition(int x){
return x&1;
}
int main(){
vector<int> pre;
pre.push_back(1);
pre.push_back(2);
pre.push_back(3);
pre.push_back(4);
pre.push_back(5);
pre.push_back(6);
pre.push_back(7);
cout<<"before: ";
for(vector<int>::iterator it=pre.begin();it<pre.end();++it){
cout<<*it<<" ";
}
reOrderArray(pre);
cout<<endl<<"after: ";
for(vector<int>::iterator it=pre.begin();it<pre.end();++it){
cout<<*it<<" ";
}
return 1;
}
拓展,在上题条件的基础上,保持原来数组的奇数之间和偶数之间的相对顺序。
#include "myHead.h"
/**
奇数全部放左边,偶数全部放右边,但是考虑原来数组中的奇(偶)数之间相对顺序 ,让他们继续相对顺序保持不变
*/
int condition(int x);
void reOrderArray(vector<int> &array) {
int i = 0,j=array.size()-1,temp;
vector<int> a,b;
while(i<j){
if(i<j && condition(array[i]) ){
a.push_back(array[i]);
}
else{
b.push_back(array[j]);
}
i++;
}
while(!b.empty()){
array.push_back(b.pop_back());
}
while(!a.empty()){
array.push_back(a.pop_back());
}
}
//求奇数偶数,用位运算加速
int condition(int x){
return x&1;
}
int main(){
vector<int> pre;
pre.push_back(1);
pre.push_back(2);
pre.push_back(3);
pre.push_back(4);
pre.push_back(5);
pre.push_back(6);
pre.push_back(7);
cout<<"before: ";
for(vector<int>::iterator it=pre.begin();it<pre.end();++it){
cout<<*it<<" ";
}
reOrderArray(pre);
cout<<endl<<"after: ";
for(vector<int>::iterator it=pre.begin();it<pre.end();++it){
cout<<*it<<" ";
}
return 1;
}