为了账号安全,请及时绑定邮箱和手机立即绑定

剑指offer(十三)调整数组顺序,使奇数位于偶数前面

标签:
Cocos2d-x


写在前面:

为了增长一下自己的数据结构能力,也为了面试准备,准备将剑指Offer做一下,并与各位分享,希望各位可以对代码以及思路提提建议,欢迎志同道合者,谢谢。

题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路:
原数组  4,2,5,7,8,1   变成 5,7,1,4,2,8
类似于直接插入的方式,从第二个数据开始判断,如果是奇数就查询前面的一个数据,判断是奇数还是偶数,如果是偶数,将这个数插入前面一个数,如果前面一个数是奇数,就不动,最核心的是,只要是找到了奇数,那么就向前找,直到找到前面的奇数,然后把这个数放在前面奇数的后面。如果找到了第一个还不是奇数,那么就把这个奇数放在第一位,

代码实现

package com.itzmn.offer;/**
 * @Auther: 张梦楠
 * @Date: 2018/7/30 09:39
 * 简书:https://www.jianshu.com/u/d611be10d1a6
 * 码云:https://gitee.com/zhangqiye
 * @Description:
 *
 *   2,4,6,1,3,5,7
 *   2 1 3 5 7 4 6
 *
 *   使用类似直接插入方法, 将负数直接插入到前面的有序队列
 *
 */public class Offer13 {


    public static void main(String[] args) {        int[] array = {2,4,6,1,3,5,7};        new Offer13().reOrderArray(array);        for (int i:array){
            System.out.println(i);
        }

    }    public void reOrderArray(int [] array) {        for (int i=1;i<array.length;i++){            if (array[i] % 2 == 1){                int temp = array[i];                for (int j=i-1;j>=0;j--){                    if (array[j] % 2 == 0){                        array[j+1] = array[j];
                    }                    if (array[j] % 2 == 1){                        array[j+1] = temp;                        break;
                    }                    if (j == 0){                        array[0] = temp;
                    }
                }
            }

        }


    }

}



作者:z七夜
链接:https://www.jianshu.com/p/b7ba7f28195d

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消