(2)JAVA给定一个整数数组,将其中的奇数元素放在数组的前半部分,偶数元素放在数组的后半部分,同时保持奇数和偶数元素的相对顺序不变。 示例:输入:[1, 2, 3, 4, 5, 6] 输出:[1, 3, 5, 2, 4, 6] (40分)
时间: 2024-10-14 22:13:13 浏览: 36
在Java中,要实现这个功能,你可以创建一个名为`separateEvenOdd`的方法,采用双指针技术。首先定义两个指针,一个指向数组的开始(left),另一个指向数组的一半(mid)。然后按照以下步骤操作:
1. 初始化两个指针:
```java
int left = 0;
int mid = arr.length / 2;
```
2. 使用循环遍历数组,当左指针小于右指针时:
- 检查当前元素(arr[left])是否是奇数。如果是奇数,交换它和中间位置(arr[mid])的值,然后左指针加一(left++)。
- 如果不是奇数,不做任何交换,直接移动右指针到下一个偶数位置(mid--)。
3. 当左指针等于右指针时,停止循环。此时,奇数元素已经被移到了前半部分,并且偶数元素在其后的原始位置。
以下是完整的Java代码实现:
```java
public class Main {
public static void separateEvenOdd(int[] arr) {
int left = 0;
int mid = arr.length / 2;
for (; left < mid; ) {
if (arr[left] % 2 != 0) { // 如果是奇数
swap(arr, left, mid);
left++;
} else { // 否则是偶数
mid--;
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] input = {1, 2, 3, 4, 5, 6};
separateEvenOdd(input);
System.out.println(Arrays.toString(input)); // 输出 [1, 3, 5, 2, 4, 6]
}
}
```
阅读全文