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

来源:互联网 发布:商城美工招聘 编辑:程序博客网 时间:2024/06/03 20:56

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

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

/** 将数组调整成左奇右偶 * @param data */public void reOrderOddEven(int[] data){reOrder(data,new Stantard(){@Overridepublic 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;}



0 0
原创粉丝点击