美文网首页
调整数组顺序使奇数位于偶数前面

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

作者: EmonH | 来源:发表于2020-03-15 20:58 被阅读0次

    注:题目来源于 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;
    }
    

    相关文章

      网友评论

          本文标题:调整数组顺序使奇数位于偶数前面

          本文链接:https://www.haomeiwen.com/subject/nxrbehtx.html