【剑指offer系列】 调整数组顺序使奇数位于偶数前面___14

来源:互联网 发布:c语言大小写转换代码 编辑:程序博客网 时间:2024/06/04 19:40

  题目描述:
  输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
  
  分析:
  单纯的只实现这道题目很简单,只需要分别从数组前后向中间遍历,遇到不合要求时就交换即可。
  但是我们可以扩展这个题目,将数组顺序的调整条件变为其它任意功能。如将能被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]);    }}
0 0