您的位置:首页 > Web前端

剑指Offer:调整数组中的数据

2016-08-25 11:32 183 查看
题目是:输入一个整数数组,实现一个函数来调整数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组后半部分。

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的倍数的函数即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 函数
相关文章推荐