调整数组使得奇数在前偶数在后
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:定义两个指针,分别记作head
、tail
。head
一直往后走,直到指向的数据不是奇数时,交换head
和tail
所指的数据。tail
一直往前走,直到指向的数据不是偶数时,交换head
和tail
所指的数据。
代码实现:
// 调整数组使得奇数在前,偶数在后
public static int[] exchange(int[] nums){
int head = 0;
int tail = nums.length-1;
while(head < tail){
// 头指针遇到奇数 就++
if(nums[head] %2 !=0){
head++;
}else{
swap(nums,head,tail);
}
if (nums[tail] %2 == 0){
tail--;
}else{
swap(nums,head,tail);
}
}
return nums;
}
private static void swap(int[] nums,int head,int tail){
int tmp = nums[head];
nums[head] = nums[tail];
nums[tail] = tmp;
}