[转]2006年哪个星座最幸运- -| 回首页 | 2006年索引 | - -MM回来了

第K小数的两个算法

                                      

在一个数组中,找出第K小的数。

这是我在以前别人的BLOG里面看到的一个题目,几乎所有的人都用快速排序的思想来做的。

还是找个中间点,如果中间点的位置为K,那么它就是那个元素,否则如果>K,就在左边继续用PARTITION的算法,如果

这个和PAR方法的思想一致。

下面是我今天上自习的时候想到的一种方法。

我用下面的思想来做这个问题:

首先我们先对数组的前K个数进行堆排序【K个数的最大堆】,然后对剩下的N-K的数字,依次加入堆,并将最大值退出堆。

最后的堆顶元素就是第K小的数字。

代码就不写了,分析一下复杂度,O(n)建堆log(k),然后的插入堆的比较次数最多是(n-k)log(k),

所以它的复杂度比较平均,在极端情况下它的效率也是很高的。

这里有个人写的代码,用上面第一种方法得到的

http://bbs.chinaunix.net/viewthread.php?tid=116218

【作者: toocn】【访问统计:】【2006年04月16日 星期日 13:56】【 加入博采】【打印

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=4889853

博客手拉手

回复

验证码:   
评论内容: