调整数组顺序使奇数位于偶数前面

 

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

相关文章
相关标签/搜索