算法练习篇之:调整数组顺序使奇数位于偶数前面 (数组)

算法练习篇之:调整数组顺序使奇数位于偶数前面 (数组)

题目描述

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

解题思路

设置两个指针p1和p2,分别指向数组的首和尾部p1向后移动,而p2向前移动。那么在什么情况下p1,p2才能移动呢?题目要求将数组全部奇数移到数组前半部分,偶数都在后半部分!那么显然当p1指向奇数时,可以向后移动,p1指向偶数时则停止等待交换。同样,p2在指向偶数时,可以向前移动,p2指向奇数停止,然后p1和p2互换元素,刚好将p1指向的偶数和p2指向的奇数交换位置。当p1索引大于p2时,指针移动停止,数组元素交换完毕

代码实现

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

public class reOrderArray {
    //将数组中奇数的数字全部调整到数偶数前面
    public void reOrder(int[] num){
        int len=num.length;
        if (num==null||len==0){
            return;
        }
        int begin=0;
        int end=len-1;
        while (begin<end){
            while ((begin<end)&&(num[begin]&0x1)!=0){//头指针向后移动,查找偶数
                ++begin;
            }
            while ((begin<end)&&(num[end]&0x1)==0){//尾指针向前移动,查找奇数
                --end;
            }
            if (begin<end){
                int temp=num[begin];
                num[begin]=num[end];
                num[end]=temp;
            }
        }

    }

    public static void main(String[] args) {
        reOrderArray test=new reOrderArray();
        int[] array={1,2,3,4,5,6};
        test.reOrder(array);
        System.out.println(array[0]+" "+array[1]+" "+array[2]);
    }
}


总结

本题来源于面试经典教材《剑指offer》中 归属于其他类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!
最后,感谢AIAS!

觉得本博客有用的客官,可以给个赞鼓励下! 嘿嘿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值