题目是:输入一个整数数组,实现一个函数来调整数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组后半部分。
bool isEven(int n){
return (n & 1) == 0;
}
void Reorder(int *pData,unsigned int length,bool (*func)(int)){
if(pData == NULL || 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 temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
}
void ReorderOddEven(int *pData,unsigned int length){
Reorder(pData,length,isEven);
}
使用函数指针的好处在于,相似的处理可以实现代码复用。比如现在需要调整为前半部分为3的倍数,后半部分不是3的倍数等。只需要传一个判断int 数据是否为3的倍数的函数即可。