您的位置:首页 > 职场人生

剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现

2015-06-03 20:57 627 查看
题目描述:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

解题思路:

这个题目的思路还是很简单的,就是利用交换的思想。

两个指针,一个从前往后一个从后往前,在相遇之前,如果前面的指针遇到偶数就和后面指针遇到的奇数交换,其实就是快排的内部的一个过程。这个题的重点在于可扩展性,也就是说不局限于偶数和奇数 或者大小或者把能被3整除的数移动到不能被3整除的数的前面,方法就是定义一个接口,实现判断的方法。

代码如下:

import java.util.Arrays;

interface JudgeMent{
boolean judge(int i);
}

public class ReorderTest {

public static void reorder(int[] data, JudgeMent judgeMent){

if(data == null || data.length == 0){
return;
}

int start = 0;
int end = data.length - 1;

while(start < end){
while(start < end && judgeMent.judge(data[start])){
start++;
}
while(start < end && !judgeMent.judge(data[end])){
end--;
}

if(start < end){
int tmp = data[start];
data[start] = data[end];
data[end] = tmp;
}

}
}

public static void main(String[] args) {

JudgeMent judgeMent = new JudgeMent() {

@Override
public boolean judge(int i) {

if((i & 1) == 0){
return false;
}
return true;
}
};

int a[] = new int[]{1, 2, 3, 4, 5};
reorder(a, judgeMent);
System.out.println(Arrays.toString(a));

int b[] = null;
reorder(b, judgeMent);
System.err.println(Arrays.toString(b));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: