问题: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