您的位置:首页 > Web前端

剑指Offer之 - 调整数组顺序使奇数位于偶数前面

2015-05-05 15:43 369 查看

题目:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

思路:

两个指针,一个指向开头,一个指向末尾。

代码:

#include<iostream>
using namespace std;

//功能:把数组里的奇数放在前面,偶数放在后面
//解法1:两个指针,一个在前一个在后

void ReorderOddEven(int *pData , unsigned int length)
{
if(pData == NULL || length <= 0)
return;
for(int i = 0 , j = length - 1 ; i < j ; i++ , j--)
{
while(i < j && (pData[i] & 1) )
{
i++;
}
while(i < j && (pData[j] & 1 == 0))
{
j--;
}
swap(pData[i] , pData[j]);
}
}

//更加通用的解法

typedef bool (*pFunc)(int);
void ReorderOddEvenCom(int *pData , unsigned int length , pFunc func)
{
if(pData == NULL || length <= 0)
return;
for(int i = 0 , j = length - 1 ; i < j ; i++ , j--)
{
while(i < j && !func(pData[i]))
{
i++;
}
while(i < j && func(pData[j]))
{
j--;
}
swap(pData[i] , pData[j]);
}
}

bool isEven(int n)
{
return (n & 1) == 0;
}

int main()
{
int num[8] = {2,4,6,8,1,3,5,7};
ReorderOddEvenCom(num , 8 , isEven);
for(int i = 0 ; i < 8 ; i++)
{
cout<<num[i]<<' ';
}
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: