题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路:
两个指针,一个指向开头,一个指向末尾。
代码:
#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;
}