一般实现
import java.util.Arrays;
public class E21MakeOddBeforeEven {
public static void reorderOddEven(int[] numbers){
if (numbers == null)
return;
int start = 0;
int end = numbers.length - 1;
while(start < end){
while(start < end && (numbers[start] & 0x1) != 0)
start ++;
while(start < end && (numbers[end] & 0x1) != 1)
end --;
if (start < end){
int swap = numbers[start];
numbers[start] = numbers[end];
numbers[end] = swap;
}
}
}
public static void main(String[] args){
int[] a = {5, 4, 3, 2, 1};
E21MakeOddBeforeEven.reorderOddEven(a);
System.out.println(Arrays.toString(a));
}
}
可扩展的实现
import java.util.Arrays;
public class E21ReorderExtensible {
interface Event<T>{
boolean isEvent(T t);
}
public static void reorderOddEven(int[] numbers, Event<Integer> event){
if (numbers == null)
return;
int start = 0;
int end = numbers.length - 1;
while(start < end){
while(start < end && event.isEvent(numbers[start]))
start ++;
while(start < end && !event.isEvent(numbers[end]))
end --;
if (start < end){
int swap = numbers[start];
numbers[start] = numbers[end];
numbers[end] = swap;
}
}
}
public static void main(String[] args){
Event<Integer> event = new Event<Integer>() {
@Override
public boolean isEvent(Integer integer) {
return (integer & 0x1) == 1;
}
};
int[] a = {5, 4, 3, 2, 1};
E21ReorderExtensible.reorderOddEven(a, event);
System.out.println(Arrays.toString(a));
}
}