剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现

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

解题思路:
这个题目的思路还是很简单的,就是利用交换的思想。
两个指针,一个从前往后一个从后往前,在相遇之前,如果前面的指针遇到偶数就和后面指针遇到的奇数交换,其实就是快排的内部的一个过程。这个题的重点在于可扩展性,也就是说不局限于偶数和奇数 或者大小或者把能被3整除的数移动到不能被3整除的数的前面,方法就是定义一个接口,实现判断的方法。

代码如下:

import java.util.Arrays;

interface JudgeMent{
    boolean judge(int i);
}

public class ReorderTest {

    public static void reorder(int[] data, JudgeMent judgeMent){

        if(data == null || data.length == 0){
            return;
        }

        int start = 0;
        int end = data.length - 1;

        while(start < end){
            while(start < end && judgeMent.judge(data[start])){
                start++;
            }
            while(start < end && !judgeMent.judge(data[end])){
                end--;
            }

            if(start < end){
                int tmp = data[start];
                data[start] = data[end];
                data[end] = tmp;
            }

        }
    }

    public static void main(String[] args) {

        JudgeMent judgeMent = new JudgeMent() {

            @Override
            public boolean judge(int i) {

                if((i & 1) == 0){
                    return false;
                }
                return true;
            }
        };

        int a[] = new int[]{1, 2, 3, 4, 5};
        reorder(a, judgeMent);
        System.out.println(Arrays.toString(a));

        int b[] = null;
        reorder(b, judgeMent);
        System.err.println(Arrays.toString(b));
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值