用java,输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变
时间: 2023-12-08 09:27:57 浏览: 92
好的,这是一个比较常见的面试题,可以使用双指针的思想来解决。具体的实现步骤如下:
1. 定义两个指针 i 和 j,分别指向数组的第一个元素和最后一个元素。
2. 当 i < j 时,执行循环:
a. 如果 nums[i] 是偶数,nums[j] 是奇数,那么交换 nums[i] 和 nums[j]。
b. 如果 nums[i] 是奇数,那么 i++。
c. 如果 nums[j] 是偶数,那么 j--。
3. 循环结束后,数组中所有的奇数都位于前半部分,所有的偶数都位于后半部分,并且奇数和奇数、偶数和偶数之间的相对位置不变。
下面是一份 Java 代码实现:
```java
public void reOrderArray(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
int i = 0, j = nums.length - 1;
while (i < j) {
while (i < j && (nums[i] & 1) == 1) {
i++;
}
while (i < j && (nums[j] & 1) == 0) {
j--;
}
if (i < j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
```
其中 `(nums[i] & 1) == 1` 可以用来判断一个数是否为奇数,`(nums[j] & 1) == 0` 可以用来判断一个数是否为偶数。
阅读全文