回 帖 发 新 帖 刷新版面

主题:一个排序算法

设有N个元素的数组包含三个不同的关键字true、false和maybe。给出一个O(N)算法,重新排列这些元素,使得所有false的元素都排在maybe元素的前面,而maybe元素都排在true元素的前面。你只能用到使用常数附加空间。

回复列表 (共5个回复)

沙发

啊,楼主的算法在哪?

板凳

x=strlen(n)
sort(n,n+x);

3 楼

[quote]啊,楼主的算法在哪?[/quote]

楼主的算法 is in the eyes of children. (from an old old song...[em2])


4 楼

首先,个人觉得这个问题很。。。
因为如果不是限制排序方法的话,由于值域是可枚举的,直接对N个元素的数组扫描一遍,对于各个分立值的个数计数,然后按照要求顺序重新写入数组就可以了,必然是O(N)的啊!

5 楼


这还不容易?
头尾各一个指针,往中间移动,把找到的true全换到左边;一遍过后再把头指针放在true的末尾,和尾指针一起再来一遍,把false交换到右边。O(N)搞定!

我来回复

您尚未登录,请登录后再回复。点此登录或注册