采用快排的算法思想
思路:
我们可以利用两个指针,来优化这个题的解法。第一个指针p1初始化时指向数组的第一个数字即number[0],它只向后移动;第二个指针初始化时指向数组的最后一个数字number[number.length-1],它只向前移动。在两个指针相遇之前,第一个指针总是位于第二个指针的前面。如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,我们就交换这两个数字。
package 分治法;
/**
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分
*/
import java.util.Arrays;
public class case01_奇数在左 {
public static void main(String[] args) {
int[] arr=new int[]{1,3,5,4,8,0,2,9};
reorderOddEven1(arr);
}
static void reorderOddEven1(int []number){
int len = number.length;
if(number == null || len == 0){
return;
}
int begin = 0;
int end = len -1;
while(begin < end){
while((begin < end) && (number[begin] & 0x1) != 0){
++begin;
}
while((begin < end) && (number[end] & 0x1) == 0){
--end;
}
if(begin < end){
int temp = number[begin];
number[begin] = number[end];
number[end] = temp;
}
}
System.out.println("number = " + Arrays.toString(number));
}
}