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

 

問題:java

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得全部的奇數位於數組的前半部分,全部的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。數組

 

使用冒泡思想,每次都當前偶數上浮到當前最右邊。時間複雜度 O(N2),空間複雜度 O(1),時間換空間。函數

 

public void reOrderArray(int[] nums) {
    int N = nums.length;
    for (int i = N - 1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (isEven(nums[j]) && !isEven(nums[j + 1])) {
                swap(nums, j, j + 1);
            }
        }
    }
}

private boolean isEven(int x) {
    return x % 2 == 0;
}

private void swap(int[] nums, int i, int j) {
    int t = nums[i];
    nums[i] = nums[j];
    nums[j] = t;
}

這段代碼剛開始看時,有個疑問,只須要一層 for 循環就行,爲啥還要設置 i ?code

後來發現,不要第一層 for 遍歷,會出現如下結果。排序

用例:
[1,2,3,4,5,6,7]

對應輸出應該爲:

[1,3,5,7,2,4,6]

你的輸出爲:

[1,3,2,5,4,7,6]

能夠理解爲冒泡排序,一次遍歷排一個數class

相關文章
相關標籤/搜索