调整数组顺序使奇数位于偶数前面

2020-03-15  本文已影响0人  EmonH

注:题目来源于 Java资讯库 ,代码通过网上搜集整理而来

 public static void main(String[] args) {
        OddBeforeEven obe = new OddBeforeEven();
        int[] arr = {1, 2, 3, 4, 5, 6, 12, 7, 8, 9, 10};
        int[] data = obe.recorderOddEven(arr, arr.length);
        System.out.println(Arrays.toString(data));

//        int[] data = obe.oddBeforeEven(arr, arr.length);
//        System.out.println(Arrays.toString(data));
 }
 // 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
 // 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
    private static int[] recorderOddEven(int[] data) {
       if(data == null || data.length <= 0){
            return null;
       }
       int i =  0;
       int j = data.length -1;
       while (i < j){
            while(!isEven(data[i]) && i < j){
                i++;
            }
            while (isEven(data[j])  && i < j){
                j --;
            }
            if(i < j){
                int tmp = data[i];
                data[i] = data[j];
                data[j] = tmp;
            }
       }
       return data;
    }
// 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
// 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
// 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
    private static int[] oddBeforeEven(int[] data){
        if(data == null || data.length <= 0){
            return null;
        }
        int begin = 0;
        int end = 0;
        int dalt = 1;
        while(end < data.length){
            while(begin < data.length  && !isEven(data[begin])){
                begin ++;
            }
            end = begin + dalt;
            while(end < data.length && isEven(data[end])){
                end ++;
            }
            if(end < data.length ) {
                int tmp = data[end];
                for (int i = end; i > begin; i--) {
                    data[i] = data[i - 1];
                }
                data[begin] = tmp;
                dalt = (++end) - (++begin);
            }
        }
        return data;
    }
// 判断是否是一个偶数
 private static boolean isEven(int n) {
    if((n & 0x1) == 0){
        return true;
    }
    return false;
}
上一篇 下一篇

猜你喜欢

热点阅读