最近复习数据结构,之前用的都是一些基础知识,没仔细考虑算法。最近考虑一些算法类的东西,发现自己水平实在是太渣了。
这个问题想了一会儿,想到从前遍历,判断奇偶数,但是没办法做到O(N)的复杂度。
其实这个题挺简单的,以后应该多动脑子想想。
这个题应该设置两个变量,一个从头遍历,一个从尾遍历,如果前面遍历发现了偶数,并且后面遍历发现了奇数,就进行交换。只需要一次遍历就可以实现左右分别是奇数和偶数。
代码1
void just(int *A,int n)
{
int pre=0;
int next=n;
while(pre<next)
{
if(A[pre]%2==0&&A[next]%2==1)
{
int temp=A[pre];
A[pre]=A[next];
A[next]=temp;
}
pre++;
next--;
}
}
代码2
void just(int *A,int n)
{
int pre=0;
int next=n;
while(pre<next)
{
while(A[pre]%2!=0)pre++;
while(A[next]%2==0)next--;
if(pre<next)
{
int temp=A[pre];
A[pre]=A[next];
A[next]=temp;
}
}
}
两种方法应该差不多,我感觉第一种似乎好一些??