博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把数组中的奇数放到偶数之前
阅读量:6682 次
发布时间:2019-06-25

本文共 2747 字,大约阅读时间需要 9 分钟。

案例

数组内容:3 4 4 6 8 2 1 1 1

调换奇偶:3 1 1 1 8 2 4 4 6

 

思路

源于快速排序

方式1

参考代码

#include 
#include
using namespace std;bool IsOdd(int num){ return num % 2 == 1 ? true : false;}bool changeArray(int *a, int size){ if(size <= 0) return false; int oddPartition = -1; int cur = 0; for(; cur < size; ++cur) { if(IsOdd(a[cur])) { if(oddPartition + 1 != cur) { int tmp = a[oddPartition+1]; a[oddPartition]= a[cur]; a[cur] = tmp; } ++oddPartition; } } return true;}int main(){ int a[] = {
3, 4, 4, 6, 8, 2, 1, 1, 1}; int size = sizeof(a) / sizeof(int); for(int i = 0; i < size; ++i) cout << a[i] << " "; cout << endl; changeArray(a, size); for(int i = 0; i < size; ++i) cout << a[i] << " "; cout << endl;}

 

方式2

参考代码

#include 
#include
using namespace std;bool IsOdd(int num){ return num % 2 == 1 ? true : false;}bool changeArray(int *a, int size){ if(size <= 0) return false; int beg = 0, end = size -1; while(beg < end) { while(beg < end && IsOdd(a[beg])) ++beg; while(beg < end && !IsOdd(a[end])) --end; if(beg < end) { int tmp = a[beg]; a[beg] = a[end]; a[end] = tmp; } } return true;}int main(){ int a[] = {
3, 4, 4, 6, 8, 2, 1, 1, 1}; int size = sizeof(a) / sizeof(int); for(int i = 0; i < size; ++i) cout << a[i] << " "; cout << endl; changeArray(a, size); for(int i = 0; i < size; ++i) cout << a[i] << " "; cout << endl;}

扩展

不是奇偶问题,别掉条件

比如正负,需要把IsOdd()函数换成判断正负的函数;

比如被5整除,需要把IsOdd()函数换成判断被5整除的函数;

。。。。。。

这是一类问题,可以给出一个模式来解决。如下

#include 
using namespace std;bool isEven(int val){ return ((val & 0x1) == 0) ? true : false;}void ReOrder(int *a, int size, bool (*func)(int)){ if (a == NULL || size <= 0) return; int beg = 0, end = size-1; while (beg < end) { while (beg < end && !func(a[beg])) ++beg; while (beg < end && func(a[end])) --end; if (beg < end) swap(a[beg], a[end]); }}void ReOrderOddEven(int *a, int size){ ReOrder(a, size, isEven);} void tranverse(int *a, int size){ if (a == NULL || size <= 0) return; for (int i = 0; i < size; ++i) cout << a[i] << " "; cout << endl;}int main(){ int a[] = {
3, 2, 5, 2, 8, 3, 3, 0, 9}; int size = sizeof(a) / sizeof(int); tranverse(a, size); ReOrderOddEven(a, size); tranverse(a, size);}

 

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3607118.html,如需转载请自行联系原作者

你可能感兴趣的文章
数据结构 试探法算法学习笔记
查看>>
nomad安装
查看>>
我的友情链接
查看>>
MySQL主备复制数据不一致的情况
查看>>
CU3ER非常Cool的3D效果的Flash Slider
查看>>
中财讯 爆遍历目录漏洞
查看>>
MongoDB 数据库备份脚本
查看>>
Linux常用命令
查看>>
10、《每天5分钟玩转Docker容器技术》学习-Docker命令之本地镜像管理
查看>>
shell脚本:输出昨天的日期
查看>>
corosync+pacemaker做高可用web集群
查看>>
mysql中各个模块如何协同工作
查看>>
MyEclipse - 在tomcat6里面配置tomcat7
查看>>
less新手入门(五)—— CssGuards、循环、合并
查看>>
我的友情链接
查看>>
当sd卡不存在时,保存文件到手机上
查看>>
android动画资料汇总
查看>>
我的友情链接
查看>>
linux文本批量替换
查看>>
计算机网络笔记--物理层(一)
查看>>