20170928_调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组只能够数字的顺序。
使得所有奇数都位于数组的前半部分,偶数都位于数组的后半部分。
//面试题14_调整数组顺序使奇数位于偶数前面
/*
输入一个整数数组,实现一个函数来调整该数组只能够数字的顺序。
使得所有奇数都位于数组的前半部分,偶数都位于数组的后半部分。
*/
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<numeric>
#include<functional>
using namespace std;
bool isEven(int n)
{
return (n&1==0); //n是偶数则返回true
}
void Reorder(int *pData, unsigned int length, bool(*func)(int)) //函数指针func
{
if(pData==nullptr || 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);
}