使奇数位于偶数前面

import java.util.Arrays;

/**
 * 使奇数位于偶数前面
 * 输入一个整型数组,实现一个方法来调整该数组中的元素的顺序,
 * 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
 * @date 2020/10/03
 **/
public class 使奇数位于偶数前面 {
     
    /**
     * 使奇数位于偶数前面
     * @param array 需要调整奇偶数位置的数组
     */
    public static void reOrderArray(int[] array) {
     
        // 1.处理arr为null的情况
        if (array == null) {
     
            throw new NullPointerException("空指针异常,array:" + array);
        }
        // 2.定义两个下标,min的初始值为0,max的初始值为arr.length - 1
        int min = 0;
        int max = array.length - 1;
        // 3.定义一个循环,用于调整数组中奇偶数的位置
        while (min < max) {
     // 如果min小于max,则一直调整数组中元素的位置
            // 4.让min从前往后找,如果arr[min]的值为偶数,则停止查找
            while (min < max && array[min] % 2 != 0) {
     
                min++;
            }
            // 5.让max从后往前找,如果arr[max]的值为奇数,则停止查找
            while (min < max && array[max] % 2 == 0) {
     
                max--;
            }
            // 6.如果min的值不等于max,则交换arr[min]和arr[max]的值
            if (min != max) {
     
                int temp = array[min];
                array[min] = array[max];
                array[max] = temp;
            }
        }
    }
    /**
     *新开一个数组空间
     * @param nums
     * @return
     */
    public int[] exchange(int[] nums) {
     
        if (nums==null||nums.length==0){
     
            return nums;
        }
        int left=0;
        int right=nums.length-1;
        int[] res=new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
     
            if ((nums[i]&1)==0){
     //偶数
                res[right--]=nums[i];
            }else{
     
                res[left++]=nums[i];
            }
        }
        return res;
    }
    public static void main(String[] args) {
     
        int[] array = {
     1, 2, 3, 4, 5, 6, 7, 8, 9};
        使奇数位于偶数前面.reOrderArray(array);
        System.out.println(Arrays.toString(array));
    }
}


你可能感兴趣的:(数据结构与算法,算法)