将所给的数组所有的奇数移到偶数之前,要求时间复杂度为O(n)
#include <iostream>
#include <iomanip>
using namespace std;
#define MAX 100
void Split(int a[],int n);
void Print(int a[],int n);
int main()
{
int n;
int a[]={29,54,68,32,49,21,396,207,181};
n=sizeof(a)/sizeof(a[0]);
cout<<"数组a中的元素:"<<endl;
Print(a,n);
cout<<"数组a调整后:"<<endl;
Split(a,n);
Print(a,n);
return 0;
}
void Split(int a[],int n)
{
int i,j,t;
i=0,j=n-1;
while(i<j)
{
while(a[i]%2!=0)//左侧为奇数就略过i+1,向右寻找
{
i++;
}
while(a[j]%2==0)//右侧为偶数就略过j-1,向左寻找
{
j--;
}
if(i<j)//交换i和j指向的元素
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
void Print(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<setw(4)<<a[i];
}
cout<<endl;
}