java给定一个整数数组,将其中的奇数元素放在数组的前半部分,偶数元素放在数组的后半部分,同时保持奇数和偶数元素的相对顺序不变。 示例:输入:[1, 2, 3, 4, 5, 6] 输出:[1, 3, 5, 2, 4, 6]
时间: 2024-10-20 17:14:15 浏览: 21
数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析
在Java中,你可以通过双指针法来实现这个功能。首先,创建两个指针,一个left从数组开始,一个right指向数组末尾。然后依次遍历数组:
1. 如果left指向的元素是奇数,将其与left右侧的第一个偶数交换位置。如果左侧已经没有偶数了,就直接将left向右移动一位。
2. 同理,如果right指向的元素是偶数,将其与right左侧的第一个奇数交换。如果右侧已经没有奇数了,就直接将right向左移动一步。
当left和right相遇时,数组就被划分为两部分:左侧是奇数,右侧是偶数,并且奇数和偶数元素的原始顺序得到了保留。
以下是Java代码实现的例子:
```java
public int[] sortArray(int[] nums) {
int left = 0; // 指向数组的起始位置
int right = nums.length - 1; // 指向数组的结束位置
while (left < right) {
// 找到第一个偶数或奇数
while (nums[left] % 2 == 0 && left < right) {
left++; // 左指针向右移动,直到找到奇数或到达数组末尾
}
// 找到第一个奇数或偶数
while (nums[right] % 2 != 0 && left < right) {
right--; // 右指针向左移动,直到找到偶数或到达数组起始位置
}
// 交换左右指针对应的数字
if (left < right) {
swap(nums, left, right);
left++;
right--;
}
}
return nums;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
```
阅读全文