方法一:双指针法,在数组前后定义两个指针,当p1遇见偶数时则调换位置,类似快速排序
1 void f1( int []array){ 2 3 if(array.length<=1) return ; 4 5 int be=0; 6 int end=array.length-1; 7 while( be<end){ 8 while(be<end&&array[be]&1==1) 9 be++; 10 while(be<end&&array[end]&1==0) 11 end--; 12 if(be<end) 13 { 14 int temp=array[be]; 15 array[be]=array[end]; 16 array[end]=temp; 17 } 18 } 19 }
函数的解耦能大大提高函数的重用性,在同类型的问题上只需改动一小部分
void f1( int []array){ if(array.length<=1) return ; int be=0; int end=array.length-1; while( be<end){ while(be<end&&!f2(arrat[be] ) ) be++; while(be<end&&f2(arrat[end)) end--; if(be<end) { int temp=array[be]; array[be]=array[end]; array[end]=temp; } } } boolean f2(int n){ return (n&1)==0; }