您的位置:首页 > Web前端

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

2015-06-15 17:21 447 查看
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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: