《劍指offer》第14題 調整數組順序,使奇數位於偶數前面(Java版答案)

題目:

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

答案:

頭尾各一個指針,

若頭部指針指向的是奇數,則後移;指向偶數時停止移動

若尾部指針指向的是偶數,則前移;指向奇數時停止移動

交換頭尾指針指向的數字。

public void adjustArray(int[] array) {
        if (array == null || array.length == 0) {
            return;
        }
        int start = 0;
        int end = array.length - 1;

        while (start < end) {
            //若頭部指針指向的是奇數,則後移;指向偶數時停止移動
            while (start < end && isOddNum(array[start])) {
                start++;
            }
            //若尾部指針指向的是偶數,則前移;指向奇數時停止移動
            while (start < end && !isOddNum(array[end])) {
                end--;
            }
            //交換頭尾指針指向的數字。
            if (start < end) {
                replace(array, start, end);
            }
        }
    }

    /**
     * 是否奇數
     * @return
     */
    private boolean isOddNum(int num) {
        if ((num & 1) == 1) {
            return true;
        }
        return false;
    }

    private void replace(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

 

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