剑指offer之编程(九)

来源:互联网 发布:java设计模式优缺点 编辑:程序博客网 时间:2024/06/10 11:26

题目描述:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。


思路:

看到题目,由于题目要求是将所有的偶数都放在后半部分,可以想到遍历数组,遇到一个偶数就将其放到数组最后,这样遍历一次数组即可完成。另一种比较好的是使用快排的思路,熟悉快排就可以知道,可以使用两个指针 head 和 tail,分别从头和尾开始遍历,当head指向的偶数,tail指向的是奇数,那么就交换,直到head指向的位置在tail之后即可。不过这种算法不能保证偶数或奇数之间的原来的先后顺序,但第一个算法可以保证这个原有的顺序。


代码如下:


import java.util.*;public class Main15 {public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();int a[] = new int[n];for(int i=0;i<n;i++){a[i] = s.nextInt();}a = reArray(a);for(int i=0;i<n;i++){System.out.println(a[i]);}}public static int[] reArray(int []array){if(array==null || array.length==0)return null;int headIndex = 0;  //头指针int tailIndex = array.length-1;  //为指针while(headIndex<tailIndex){while(headIndex<tailIndex && (array[headIndex]%2)!=0)  //0x1是16进制的数,0x是16进制数的标志,0x1和一个数做与(&)运算可以判断这个数的奇偶性{headIndex++;}while(tailIndex>headIndex && (array[tailIndex]%2)==0)  //循环找出奇数{tailIndex--;}if(headIndex<tailIndex)  //交换位置{int i = array[headIndex];array[headIndex] = array[tailIndex];array[tailIndex] = i;}}return array;}}


本人经验,仅供参考!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 闲鱼买了假门票怎么办 买黄金买到假的怎么办 闲鱼被买家骗了怎么办 闲鱼上小视频没法保存怎么办 qq空间无法查看怎么办 华为手机电池不耐用怎么办 内内被动过怎么办 hp电脑开机黑屏怎么办 网上开店快递费怎么办 保温杯外壳掉漆怎么办 拖鞋前面磨脚怎么办 塑料拖鞋磨脚怎么办 路由器进不去设置界面怎么办 手机号丢了微信登不上怎么办 电脑总是闪黑屏怎么办 支付宝破产钱怎么办 淘宝号码注册过怎么办 农行k宝怎么办信用卡 电脑页面无法显示怎么办 对方银行停止收款怎么办 淘宝东西买太多怎么办 淘宝号黑号了怎么办… 中通包裹异常怎么办 包裹退回去了怎么办 qq支付密码错误怎么办 ie8出现闪退怎么办 平板输不了密码怎么办 华硕笔记本键盘打不开怎么办 电脑打不开rar文件怎么办 苹果手机淘宝卡怎么办 淘宝联盟网址打不开怎么办 淘宝买东西卖家不退货怎么办 手机清理后微信打不开视频怎么办 搜索历史已关闭怎么办 微博重新激活怎么办 淘宝直播反应慢怎么办 微信新设备无法登录怎么办 dnf自动连接失败怎么办 APP注册没有成功怎么办 忘记绑定微信号怎么办 淘宝钻石绣被骗怎么办