剑指offer23题:调整数组顺序使得奇数位于偶数前面
2018-12-27 本文已影响0人
灰化肥发黑会挥发
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分
- 思路:个人思路,设置两个指针,一个从前往后,一个从后往前,然后找到在前列的第一个奇数和在后面的第一个偶数,然后二者互换。
public class ReordOddEven {
public void Record(int[] arr){
if(arr.length==0) return ;
int start = 0;
int end = arr.length-1;
while(start<end){
while(start<end&&arr[end]>>1==0) end--;
while(start<end&&arr[start]>>1!=0) start++;
if(start<end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
}
}
- 更好的做法是将判断奇偶性解耦出来,这样同类型的题目都能使用相同的方法处理
public class ReordOddEven {
public void Record(int[] arr){
if(arr.length==0) return ;
int start = 0;
int end = arr.length-1;
while(start<end){
while(start<end&&judge(arr[end])) end--;
while(start<end&&!judge(arr[start])) start++;
if(start<end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
}
public boolean judge(int data){
if(data>>1==0) return true ;
else return false;
}
}