1. 程式人生 > >調整陣列順序使奇數位於偶數前面

調整陣列順序使奇數位於偶數前面

題目

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

分析

對於陣列的操作,插入是比較耗時的, 因為要移動插入位置之後的所有元素,騰出一個空位,供元素插入。所以對陣列的操作,儘量是交換不同位置的元素。

因此我們維護兩個指標front和tail,front初始化時指向陣列的第一個數字,它只向後移動;tail指標初始化時指向陣列的最後一個數字,它只向前移動。在兩個指標相遇之前,front指標總是在tail之前。如果front指向的數字是偶數,且tail指標指向的是奇數,則交換兩個數字。

程式碼

public static void reorderOddEven(int [] arr) {
        if(arr == null || arr.length <= 0) {
            return;
        }
        int front = 0;
        int tail = arr.length - 1;
        while(front < tail){
            while(front < tail && (arr[front] & 1) == 0){
                front++;
            }
            while(front < tail && (arr[tail] & 1) == 0) {
                tail -- ;
            }
            if(front < tail) {
                int temp = arr[front];
                arr[front] = arr[tail];
                arr[tail] = temp;
            }
        }
    }