一般实现
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) ) ;
}
}