使奇數位於偶數前面

zhz小白弟弟發表於2020-10-10
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));
    }
}


相關文章