剑指offer刷题之c++实现的调整数组顺序使奇数位于偶数前面
2015-08-08 12:22
801 查看
#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; }
相关文章推荐
- 剑指offer刷题之c++实现的反转链表
- 剑指offer刷题之c++实现的合并两个有序的链表
- 剑指offer刷题之c++实现的替换空格
- 剑指offer刷题之c++实现的求链表中倒数第k个值
- C++数组
- Leetcode -- Roman to Integer
- C++设计模式——单例模式
- 用最小最大的两个数交换首尾两数
- Caesar cipher
- c++ stl string char* 向 string 转换的问题
- C/C++程序基础
- C++静态库和动态库
- 分数相加减的代码(c++)
- c++自定义string类
- 牛客网(搜狗2015 C++工程师笔试题)
- [C++11 并发编程] 04 - 动态选择并发线程的数量
- C++连接mysql数据库的两种方法
- 【C++基础之一】C++ 虚函数表解析
- C/C++(链表应用)笔记——使用链表进行多项式的合并
- C++ 虚函数实现多态浅析