一坨任意整数数组。写一个函数,把数组里的奇数放前面。偶数放后面。
代码如下:时间复杂度为O(n),空间复杂度为O(1)
#include <stdio.h>
inline void swapAB(int& a ,int& b)
{
int t=a;
a=b;
b=t;
}
void solve(int* p,size_t n)
{
int *pf,*pl;
if(n<=1) return;
pf=p;
pl=p+n-1;
while(1)
{
while(*pf%2==1)++pf;
while(*pl%2==0)--pl;
if(pf<pl) swapAB(*pf,*pl);
else break;
}
}
int main(int argc, char **argv)
{
const int ilen=10;
int i=0;
int in[ilen] = {1,2,3,4,5,6,7,8,9,0};
solve(in,ilen);
for(i=0;i<ilen;i++)
{
printf("%d ",in[i]);
}
return 0;
}
本文介绍了一个简单的奇偶分离算法,该算法能将整数数组中的所有奇数移动到数组的前部分,而所有偶数则移动到数组的后部分。算法的时间复杂度为O(n),空间复杂度为O(1)。通过两个指针分别从数组的两端开始向中间遍历,当左指针遇到偶数、右指针遇到奇数时进行交换。
143

被折叠的 条评论
为什么被折叠?



