/**
* 题目描述:
* 输入一个整数数组,程序对数组进行整理,使得奇数和偶数分开。
* 奇数位于数组前半部分,偶数位于数组前半部分都可以。
*
* 分析:
* 此题可以用快速排序的方法,维护两个游标 i 和 j;
* i 从前向后,碰到偶数跳过去,碰到奇数停止;
* j 从后向前,碰到奇数跳过去,碰到偶数停止;
* 两者停止后,若i < j , 则交换i,j所指元素,i++, j--
*
* 注:
* Odd: 奇数
* Even: 偶数
*
*/
public class OddEven {
//由于数组是引用类型,可以直接在原数组桑修改
public static void seperateOddEven(int[] arr){
int i = 0;
int j = arr.length - 1;
while (i < j){
//如果是偶数,则跳过,求余判断奇数偶数对正负数都成立
while( arr[i]%2 == 0 && i < arr.length -1)//边界条件限制当全奇或全偶时,不会出现异常
i++;
//如果是奇数,则跳过
while( arr[j]%2 == 1 && j > 0)
j--;
if(i < j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {1,2,3,4,5,6,7,8,9,10};
//int[] arr = {2,4,6,8,10}
//int[] arr = {1,3,5,7,9};
seperateOddEven(arr);
for(int elem : arr)
System.out.println(elem);
}
}