写在前面:
需要注意的是理解解耦这种思想,注重逻辑框架的搭建实现代码可扩展性的提高。另外,题目没要求奇数之间和偶数之间的相对位置不变,如果要求,要怎么写。
测试用例:
功能测试:标准的数组传入
特殊测试:空指针,输入数组只包含一个数字
#include<iostream>
#include<string.h>
using namespace std;
bool isEven(int n)
{
return (n&1)==0;
}
void Reorder(int* pData,int length,bool (*func)(int))
{
if(!pData||length==0)
return;
int* pbegin=pData;
int* pend=pData+length-1;
while(pbegin<pend)
{
while(pbegin<pend&&!func(*pbegin))
pbegin++;
while(pbegin<pend&&func(*pend))
pend--;
if(pbegin<pend)
{
int tmp=*pbegin;
*pbegin=*pend;
*pend=tmp;
}
}
}
void ReorderOddEven(int* pData,int length)
{
Reorder(pData,length,isEven);
}
int main()
{
int *pData=new int[10]{1,2,3,4,5,6,7,8,9};
ReorderOddEven(pData,10);
return 0;
}
函数Reorder通过函数func的标准将数组划为两个部分,当需要其他标准时,比如是否被3整除,只需要改变isEven函数,而不需要改变Reorder函数。