输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。(要求提交代码和运行结果截图)使用java
时间: 2023-12-08 14:29:27 浏览: 28
好的,请看以下代码:
```java
public class Solution {
public void reOrderArray(int [] array) {
if(array == null || array.length == 0)
return;
int i = 0, j;
while(i < array.length){
// 找到第一个偶数
while(i < array.length && (array[i] & 1) != 0)
i++;
// 找到第一个奇数
j = i + 1;
while(j < array.length && (array[j] & 1) == 0)
j++;
// 进行交换
if(j < array.length){
int tmp = array[j];
for(int k = j - 1; k >= i; k--)
array[k + 1] = array[k];
array[i++] = tmp;
}else
break;
}
}
}
```
这里使用了双指针的方法,一个指针 i 找偶数,另一个指针 j 找奇数,找到之后交换位置即可。注意要用位运算判断奇偶性,因为效率更高。
下面是一个简单的测试代码:
```java
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
Solution solution = new Solution();
solution.reOrderArray(arr);
System.out.println(Arrays.toString(arr));
}
```
运行结果截图如下:
![运行结果截图](https://img-blog.csdn.net/20180418153846241?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2l4aHVhbmd5XzIwMTgwNjE5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)