题目描述:
输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
分析:
单纯的只实现这道题目很简单,只需要分别从数组前后向中间遍历,遇到不合要求时就交换即可。
但是我们可以扩展这个题目,将数组顺序的调整条件变为其它任意功能。如将能被3整除的放在前半部分等。
这样我们可以将判断条件换为一个函数,每次需要不同的功能时,就传入不同的函数指针。
代码:
typedef bool (*pFunc)(int n) ; //定义函数指针
bool isOdd(int n){
return (n&1)==1;
}
void adjust(vector<int>& nums,pFunc fun){ //根据不同的fun参数,来实现不同的调整
int i=0,j=nums.size()-1;
while(i<j){
while(i<j&&fun(nums[i])) ++i;
while(i<j&&(!fun(nums[j]))) --j;
if(i<j)
swap(nums[i],nums[j]);
}
}