一道C语言小题目,能不能更简洁呢

题目如下:
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。如输入数组1,4,2,7,8,9,输出结果为1,7,9,2,4,8。
#include
#defineN10
intis_odd(intnum)
{
if(num%2!=0)
return1;
}
voidinit(int*array)
{
inti;
srand(time(NULL));
for(i=0;iarray[i]=rand()%100;
}
voidswap(int*i,int*j)
{
inttmp;
tmp=*i;
*i=*j;
*j=tmp;
}
voidprint(int*array)
{
inti;
for(i=0;iprintf("%d",array[i]);
printf("\n");
}
voidsort(int*array)
{
inti=0,j=N-1;
for(i=0;iif(!is_odd(array[i]))
for(j=N-1;j>i;j--)
if(is_odd(array[j])){
swap(array+i,array+j);
break;
}
}
}
intmain(intargc,char**argv)
{
intarray[N];
init(array);
print(array);
sort(array);
print(array);
return0;
}
蝴蝶刀刀
浏览 332回答 2
2回答

临摹微笑

最简单的方法是分配一个新的同样大的数组,扫描原数组,奇数从前往后放到新数组,偶数从后往前放新数组,然后拷贝回来,释放新数组。这个代码太简单了,我就不写了。下面是个更快一点、只需要O(1)空间的算法,也许你会觉得很眼熟。voidrearrange(int*a,intn){inti=0,j=n-1,t=a[0];while(i!=j){while(i

慕勒3428872

没细看代码,但是看了下楼主的sort方法,时间复杂度是平方级的其实这个排序可以随便使用快排、归并、堆排序来解决(这些算法的平均时间复杂度都是0(NlogN)),对于你的需求,只是额外需要自定义元素比较方法即可:如果两个是同一类数字(比如奇数),则按照具体值比较,否则不同类数字(一个是奇数,一个是偶数),则奇数大于任何偶数
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript