您的位置:首页 > Web前端

(《剑指Offer》笔记)调整数组顺序使奇数位于偶数前面

2014-09-09 22:28 253 查看
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

分析:这是一个将数组按照某个二分法标准分成左右两堆的题目。可以考虑类似快速排序的方法。为了使程序便于扩展,分类标准采用接口。

/** 将数组调整成左奇右偶
* @param data
*/
public void reOrderOddEven(int[] data){
reOrder(data,new Stantard(){

@Override
public boolean isSthByStandard(int n) {
// TODO 自动生成的方法存根
return (n&0x1)==0;//偶数返回true,奇数返回false
}});
}

/**
* 分类标准
*/
public interface Stantard{
boolean isSthByStandard(int n);
}

/**类似于快速排序(小于枢轴元素放左边,大于枢轴元素放右边),该函数按条件将元素划分成两部分,一些放左边,一些放右边
* @param data
*/
public void reOrder(int[] data,Stantard standard){
int first=0,last=data.length-1;
while(true){
while((first<last)&&!standard.isSthByStandard(data[first]))//左边
first++;
while((first<last)&&standard.isSthByStandard(data[last]))//右边
last--;
if(first>=last)
break;
swap(data,first++,last--);
}
}
/** 交换数组中两个元素的位置
* @param data
* @param i
* @param j
*/
private void swap(int[] data, int i, int j) {
// TODO 自动生成的方法存根
int temp=data[i];
data[i]=data[j];
data[j]=temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: