帮我写Java代码有一个整数数组a,设计一个算法将所有奇数位的元素移动到所有偶数位的元素的前面,要求它们的相对次序不改变。 例如a={1,2,3,4,5,6,7,8},移动后a={2,4,6,8,1,3,5,7}。
时间: 2024-10-28 19:09:14 浏览: 21
你可以通过双指针法来解决这个问题,一个指针从数组开始(表示偶数位置),另一个指针从数组末尾开始(表示奇数位置)。当遇到奇数位的元素时,如果它小于当前偶数位的元素,就交换两个位置上的值;然后移动奇数指针向前一位。以下是Java代码示例:
```java
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7, 8};
sortOddEven(a);
for (int num : a) {
System.out.print(num + " ");
}
}
// 使用双指针法对奇数位元素进行排序
private static void sortOddEven(int[] arr) {
int left = 0; // 偶数位置指针
int right = arr.length - 1; // 奇数位置指针
while (left < right) {
if (arr[left] % 2 == 0 && arr[right] % 2 != 0) { // 如果左是偶数右是奇数,且右大于左
// 交换
swap(arr, left++, right--);
} else if (arr[left] % 2 != 0) { // 如果都是奇数,直接右移
right--;
} else { // 否则是偶数,左移
left++;
}
}
}
// 交换数组中两个元素的位置
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
运行这段代码后,数组`a`就会按照题目要求变为`{2, 4, 6, 8, 1, 3, 5, 7}`。
阅读全文