题目如下:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。如输入数组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;}
慕勒3428872
TA贡献1848条经验 获得超6个赞
没细看代码,但是看了下楼主的sort方法,时间复杂度是平方级的其实这个排序可以随便使用快排、归并、堆排序来解决(这些算法的平均时间复杂度都是0(NlogN)),对于你的需求,只是额外需要自定义元素比较方法即可:如果两个是同一类数字(比如奇数),则按照具体值比较,否则不同类数字(一个是奇数,一个是偶数),则奇数大于任何偶数
添加回答
举报
0/150
提交
取消