如何在长度为n的数列中找到第k大的数

rt,首先自己思考了一下。维护一个n的大项堆,然后输出第k个根节点。当然也是自己很简单的一个思路(可能是因为最近比较爱堆排序吧)其实堆排序是比较适合文件量级很大的情况下,这样的效率比较快。比如后面文章提到的topk以及海量数据处理的面试。

(当然也需要记得做一些异常处理!比如说k>N的情况)

那么上网百度了一下。网上也给出了不同的答案。

1. 快速排序:从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:

1). Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;

2). Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n);

这样也需要思考一下,数列本就是无序的情况,快排的每一次分区可以判断第k大的数在分区的哪个位置

2. 建立堆排序,pop出第k个数

3. 用Merge Sort算法,整个算法复杂度为 O(NlgN), 然后找到第K个即可

4. select算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,603评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,098评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,034评论 0 2
  • I: 1.是什么? 最近比较流行“重要的事情说三遍”的强调方式,而在本段阅读片段中,则是将这种表达进行提升。...
    观博家旺仔阅读 1,292评论 2 2
  • 这儿的天气很容易给我一种一成不变的错觉。所以在这工作的四年里,我总恍惚觉得一个夏天如此漫长,竟始终没有完结。 公司...
    无言的叹息阅读 1,859评论 0 0

友情链接更多精彩内容