- 已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4小时前关门了。
Improve this question
用C语言编写一个高效的函数,该函数接收一个自然数数组A
,其个数为n
。该函数必须如下重新排列数组A
:
在左边的部分,所有的偶数将按升序排序,而在右边的部分,所有的奇数将按降序排序。
函数必须按n·log(n)的顺序运行。
禁止使用辅助数组,但我们可以使用以下函数:
快速排序,二进制搜索,分区,合并排序..
例如:A={6, 8, 8, 10, 20, 5,1}
:函数A={ 1, 20, 5, 6, 8, 8, 10 }
将重新排列数组
我试着用快速排序对整个数组进行排序,然后遍历所有元素,把偶数放在第一位,然后计算有多少个偶数,然后,在它试着把奇数放在第二位之后,用evencounter开始,试着按降序排序。
复杂度应该是n·log(n),所以我不知道遍历所有元素是否正确。
1条答案
按热度按时间bnlyeluc1#
我认为使用标准的C函数
qsort
就足够了。这是一个演示程序。
程序输出为
否则,您可以编写一个函数,将数组拆分为两个分区,并分别对分区进行排序。
注意这个孤独的
如果不强制转换为
int
,表达式的结果将是unsigned int
(x和y的类型),并且永远不能为负。如果你想拥有一个有符号整数数组,那么除了在这个语句中从无符号整数到整数的其他变化之外,使用标准的C函数
abs