为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶刀刀 2019-04-09 20:23:21
题目如下:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。如输入数组1,4,2,7,8,9,输出结果为1,7,9,2,4,8。#include#defineN10intis_odd(intnum){if(num%2!=0)return1;}voidinit(int*array){inti;srand(time(NULL));for(i=0;i
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

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

TA贡献1848条经验 获得超6个赞

没细看代码,但是看了下楼主的sort方法,时间复杂度是平方级的
其实这个排序可以随便使用快排、归并、堆排序来解决(这些算法的平均时间复杂度都是0(NlogN)),对于你的需求,只是额外需要自定义元素比较方法即可:
如果两个是同一类数字(比如奇数),则按照具体值比较,否则不同类数字(一个是奇数,一个是偶数),则奇数大于任何偶数
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信