剑指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;
}
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;
}
相关文章推荐
- JSP九大内置对象的作用和用法总结
- Delphi XE8 百度 JavaScript API 调用示例
- angular js 指令的数据传递 及作用域数据绑定
- js-新窗口打开页面
- js/jQuery判断浏览器名称、内核版本、浏览器壳
- 【Feasibility of Learning】林轩田机器学习基石
- 前端为啥要用javascript框架
- 前端为啥要用javascript框架
- CSS Sprite 雪碧图使用场景 学习笔记
- JSON: jasckson 字段 过滤
- css叠加原则,就近原则
- JSongTaste
- HTML meta头部小结
- React.js再探(四)
- 【转】高性能web开发 - 如何加载JS,JS应该放在什么位置?
- jquery 条件搜索某个标签下的子标签
- Reverse Nodes in k-Group
- javascript小例子:實現四方向文本无缝滚动效果
- HTML5 常用标签整理
- Node.js学习