题目:输入一个整型数组,实现一个函数来调整该数组中数字的长度,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
关键:考虑扩展性,如,奇数偶数条件换成,是否被3整除
思路:时间复杂度O(n),前后一起查找
源代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void reverse(int *p,int len)
{
int i=0;
len=len-1;
while(i<len)
{
if(p[i]%2==0 && p[len]%2 !=0)
{
int a;
a=p[i];
p[i]=p[len];
p[len]=a;
i++;
len--;
}
if(p[i]%2!=0)
{
i++;
}
if(p[len]%2==0)
{
len--;
}
}
}
bool isEven(int n)
{
return (n&1)==0;
}
void reverse1(int *p,int len,bool (*func)(int))
{
int i=0;
len=len-1;
while(i<len)
{
if(func(p[i]) && !func(p[len]))
{
int a;
a=p[i];
p[i]=p[len];
p[len]=a;
i++;
len--;
}
if(!func(p[i]))
{
i++;
}
if(func(p[len]))
{
len--;
}
}
}
void list(int *p,int len)
{
// int len=sizeof(p)/sizeof(int);
for(int i=0;i<len;i++)
printf("%d ",p[i]);
}
void main()
{
int a[5]={0,1,2,3,4};
printf("交换前:");
list(a,5);
reverse1(a,5,isEven);
printf("\n第二种方法交换后:");
list(a,5);
}
结果:
交换前:0 1 2 3 4
交换后:3 1 2 0 4
结果:
交换前:0 1 2 3 4
第二种方法交换后:3 1 2 0 4