方法一:
声明一个数组,与原来的数组大小一样,遍历原来的数组,把找到的奇数放在前面,找到的偶数放在后面。
#include <iostream>
using namespace std;
void tiaozheng(int a[],int n)
{
int i,j,k,m;
int b[100];
k =0;
m = n-1;
for(i=0;i<n;i++)
{
//if(a[i]%2==1)
if((a[i]&1))
{
b[k] = a[i];
k++;
}
else
{
b[m] = a[i];
m--;
}
}
for(j=0;j<n;j++)
{
printf("%3d",b[j]);
}
}
方法二:采用俩个指针,分别指向第一个位置,和最后一个位置,
当前面的第一个指针遇到了偶数,并且后面一个指针遇到了奇数,那么就把这俩个指针指向的位置进行交换数据。
优点是不用单独声明一个数组。
void tiaozheng(int a[] , int len)
{
int *p1,*p2 ,tmp;
p1 = a;
p2 = a+len-1;
while(p1<p2)
{
if((*p1&1)) //奇数
{
p1++;
continue;
}
if(((*p2&1)==0))
{
p2--;
continue;
}
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int i;
for(i= 0 ;i<len ;i++)
{
printf("%d",a[i]);
}
}
void main()
{
int a[]={1,2,3,5,4,7};
int len;
len = sizeof(a)/sizeof(int);
tiaozheng(a,len);
}