美文网首页
【剑指Offer 14】调整数组顺序使奇数位于偶数前面

【剑指Offer 14】调整数组顺序使奇数位于偶数前面

作者: 3e1094b2ef7b | 来源:发表于2017-07-08 18:58 被阅读21次

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

    代码如下:

    package demo;
    
    public class Test13 {
        public static void recordOddEven(int[] arr) {
            if(arr == null || arr.length < 2) {
                return;
            }
        
            // 从左到右记录偶数的位置
            int start = 0;
            // 从右到左记录奇数的位置
            int end = arr.length - 1;
        
            while(start < end) {
                // 找偶数
                while(start < end && (arr[start] % 2 != 0)) {
                    start++;
                }
                // 找奇数
                while(start < end && arr[end] % 2 == 0) {
                    end--;
                }
                /*
                 * 找到后就将奇数和偶数交换位置
                 * (对于start==end的情况,交换不会有影响。)
                 */
                int tmp = arr[start];
                arr[start] = arr[end];
                arr[end] = tmp;
            }
        }
    
        /**
         * 打印数组元素
         * @param arr
         */
        public static void printArray(int[] arr) {
            if(arr == null || arr.length <= 0) {
                return;
            }
            for (int i : arr) {
                System.out.print(i + " ");
            } 
            System.out.println();
        }
    
        public static void main(String[] args) {
            System.out.println("数组中偶数、奇数交替出现");
            int[] arr1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
            recordOddEven(arr1);
            printArray(arr1);
        
            System.out.println("数组中所有偶数都在奇数前面:");
            int[] arr2 = {0, 2, 4, 6, 1, 3, 5, 7};
            recordOddEven(arr2);
            printArray(arr2);
        
            System.out.println("数组中所有奇数都在偶数前面:");
            int[] arr3 = {1, 3, 5, 7, 0, 2, 4, 6};
            recordOddEven(arr3);
            printArray(arr3);
        
            System.out.println("数组为NULL:");
            int[] arr4 = null;
            recordOddEven(arr4);
            printArray(arr4);
        
            System.out.println("数组中只有1个数字:");
            int[] arr5 = {1};
            recordOddEven(arr5);
            printArray(arr5);
        }
    }
    
    运行结果

    来源:http://blog.csdn.net/derrantcm/article/details/46669015

    相关文章

      网友评论

          本文标题:【剑指Offer 14】调整数组顺序使奇数位于偶数前面

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