54.调整数组顺序使奇数位于偶数前面(数组)。
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
//coder:LEE 20120330
#include<iostream>
#include<CASSERT>
#include<vector>
using namespace std;
void Swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void AdjustSequence(int *A,int n)
{
int behind=-1;
for (int i=0;i<n;i++)
{
if(A[i]%2==1)
{
behind++;
Swap(&A[behind],&A[i]);
}
}
}
bool IsEven(int n)
{
if((n&1)==0)
return true;
else
return false;
}
void AdjustSequence(int *A,unsigned int nLen,bool (*func)(int))
{
assert(A!=NULL&&nLen>0&&func!=NULL);
unsigned int behind=0;
unsigned int front=nLen-1;
while(behind<front)
{
if(!func(A[behind]))
{
behind++;
continue;
}
if (func(A[front]))
{
front--;
continue;
}
Swap(&A[behind],&A[front]);
}
}
int main()
{
int A[]={2,5,3,4,9,6};
int nLen=sizeof(A)/sizeof(int);
AdjustSequence(A,nLen,IsEven);
for (int i=0;i<nLen;i++)
{
cout<<A[i];
}
return 0;
}