調整數組順序是奇數位於偶數前面 - Java實現

19. 調整數組順序是奇數位於偶數前面

問題描述

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,是的所有奇數位於數組的前半部分,所有偶數位於數組的後半部分

問題分析

我們維護了兩個指針,一個 start 指針指向數組頭,一個 end 指針指向數組尾。

下面開始我們的判斷內容:

  1. 保證 start < end
  2. 如果滿足 1 的情況下 start 指向第一個偶數(start是從前往後),end指向第一個奇數(end是從後往前)
  3. 如果不滿足2,哪個不滿足就移動哪個指針,start++, end--
  4. 交換兩個指針指向的數

優化下:判斷奇數偶數這個是題目內容,如果我們有別的條件,有應該怎麼辦,所以我將其主要的判斷內容,抽出來,寫了個函數,我們只需要重寫這個函數就可以實現不同的功能了。

代碼

import java.util.Arrays;

/**
 * Class day19 ...
 *
 * @author LiJun
 * Created on 2019/2/14
 */
// 調整數組順序是奇數位於偶數前面
public class day19 {
    public static void main(String[] args) {
        int[] a = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
        reorderOddEvent(a);

        System.out.println(Arrays.toString(a));
    }
    public static void reorderOddEvent(int[] a){
        if(a == null || a.length == 0){
            return;
        }
        int start = 0;
        int end = a.length - 1;

        while(start < end){
            // 在這裏我們首先要保證的是 start < end 而且 是奇數 如果是奇數 start指針向後移
            while(start < end && !isEvent(a[start])){
                start ++;
            }
            // 在這裏我們首先要保證的是 start < end 而且 是奇數 如果是偶數 end指針向前移
            while(start < end && isEvent(a[end])){
                end --;
            }
            // 如果start指針指向奇數 end指針指向偶數,交換兩個數
            if(start < end){
                int temp = a[start];
                a[start] = a[end];
                a[end] = temp;
            }
        }
    }
    // 單獨抽象出來這個判斷條件是爲了解決這一系列的問題 不只是奇偶數
    public static boolean isEvent(int n){
        if((n & 1) != 0){
            return false;
        }
        return true;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章