调整数组顺序使奇数位于偶数前面

问题陈述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

思路分析

定义两个循环变量i,j,i从数组头开始遍历寻找偶数,j从数组尾开始遍历寻找奇数,然后交换。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Partition_OddAndDouble {
public int[] exchange(int[] nums){
int i=0,j=nums.length-1;
while(i<j){
while(i<j&&(nums[i]&1)==1) i++; //如果为奇数,则继续i++,直到发现偶数。x&1 位运算 等价于x%2取余运算,此处必须继续判断i<j,否则要一直是偶数,就死循环了,i也不可控。
while(i<j&&nums[j]%2==0) j--; //如果为偶数,则继续j--,直到发现奇数。
int temp=nums[i]; //交换
nums[i]=nums[j];
nums[j]=temp;
}
return nums;
}
public static void main(String[] args){
int[] nums={2,1,6,7,3,2,0};
Partition_OddAndDouble partition_oddAndDouble=new Partition_OddAndDouble();
partition_oddAndDouble.exchange(nums);
for(int i=0;i<nums.length;i++){
System.out.println(nums[i]);
}
}
}