問題: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