剑指offer 14 - 调整数据顺序使奇数位于偶数前面

来源:互联网 发布:大数据 hadoop 配置 编辑:程序博客网 时间:2024/06/05 10:14

1.设定两个指针p1,p2: p1初始指向第一个元素,p2指向第二个元素

2.p1向前直到指向偶数,p2向前直到指向奇数,若p1<p2交换,若p1>p2停止

3.函数指针

#include <iostream>using namespace std;bool isEven(int n){return  (n&1)==1;   //偶数返回1}void Recorder(int *data,  unsigned  int length,   bool (*func)(int)  ) //函数指针{if(data==NULL|| length==0)return;int *pBegin=data;int *pEnd=data+length-1;while(pBegin<pEnd){while(pBegin<pEnd && func(*pBegin))  //奇数在前pBegin++;while(pBegin<pEnd && !func(*pEnd))  //奇数在前pEnd--;if(pBegin<pEnd)swap(*pBegin,*pEnd);}}void Test(int *data,int length){for(int i=0;i<length;i++)    cout<<data[i]<<"  ";cout<<endl;Recorder(data,length,isEven);cout<<"转换后:"<<endl;for(int i=0;i<length;i++)    cout<<data[i]<<"  ";cout<<endl<<endl;}void Test1(){int data[]={1,2,3,4,5};Test(data,sizeof(data)/sizeof(int));}void Test2(){int data[]={1,3,5,2,4};Test(data,sizeof(data)/sizeof(int));}void Test3(){int data[]={2,4,1,3,5};Test(data,sizeof(data)/sizeof(int));}void Test4(){Test(NULL,0);}void Test5(){int data[]={1};Test(data,sizeof(data)/sizeof(int));}int main(int argc, char* argv[]){Test1();Test2();Test3();Test4();Test5();return 0;}


0 0