Java用顺序栈有一个整数数组a,设计一个算法,将所有偶数位的元素移到奇数位的元素的前面,要求它们的相对次序不变。
时间: 2024-05-01 19:24:12 浏览: 41
可以使用双指针法遍历数组,并且使用一个辅助数组temp记录遍历过程中的偶数元素,最后再将temp中的元素复制回原数组的前面。
具体步骤如下:
1. 定义一个辅助数组temp,用于记录遍历过程中的偶数元素。
2. 定义两个指针i和j,初始值分别为0和1。
3. 从头开始遍历数组,如果a[i]为偶数,则将它存入temp中,并将i加2;否则将i加1。
4. 如果a[j]为奇数,则将它与temp中的元素交换位置,并将j加2;否则将j加1。
5. 重复步骤3和步骤4,直到j超出数组范围。
6. 遍历结束后,将temp中的元素复制回原数组的前面。
代码实现如下:
```java
public static void moveEvenToFront(int[] a) {
int[] temp = new int[a.length / 2]; // 辅助数组,用于存放偶数元素
int i = 0, j = 1, k = 0;
while (j < a.length) {
if (a[i] % 2 == 0) {
temp[k++] = a[i];
i += 2;
} else {
i++;
}
if (a[j] % 2 == 1 && k > 0) {
a[j] = temp[--k];
}
j += 2;
}
// 复制temp中的元素到原数组前面
while (k > 0) {
a[--j] = temp[--k];
}
}
```
测试代码如下:
```java
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
moveEvenToFront(a);
System.out.println(Arrays.toString(a)); // [2, 4, 6, 1, 3, 5, 7, 8, 9]
}
```
阅读全文