从10000个整数中找出最大的10个,最好的算法是什么?

算法一:冒泡排序法

  千里之行,始于足下。我们先不说最好,甚至不说好。我们只问,如何“从10000个整数中找出最大的10个”?我最先想到的是用冒泡排序的办法:我们从头到尾走10趟,自然会把最大的10个数找到。方法简单,就不再这里写代码了。这个算法的复杂度是10N(N=10000)。

算法二:

  有没有更好一点的算法呢?当然。维持一个长度为10的降序数组,每一个从数组拿到的数字都与这个降序数组的最小值比较。如果小于最小值,就舍弃;如果大于最小值,就把它插入到降序数组中的合适位置,舍弃原来的最小值。这样,遍历一遍就可以找到最大的10个数。因为需要在降序数组中插入一个数,对于遍历的每个数可能都需要这样,所以其复杂为5N。

  伪代码如下:

  A[N],a[m](分别为原始数组和降序数组,其中N=10000,m=10)

  a = A[0 ... 9](将数组A的前10个数赋给数组a)

  sort a(将组数a降序排序)

  for i in A[ 10 ... N](从10到N遍历数组A)

    if A[i] > a[9] then (如果当前值比降序数组中的最小值大)

      删除a[9]

      将A[i]插入a的合适位置,使a保持降序

    end if

  end for

  输出数组a

  其实算法二还有一个优点,就是当数组很大时,可以将数据分段读入内存处理,而这样做并不影响结果。

  你还有什么办法?

(算法)从10000个数中找出最大的10个相关推荐

  1. 海量数据处理 - 10亿个数中找出最大的10000个数(top K)

    海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 版权声明:本文为博主原创文章,未经博主允许不得转载 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望 ...

  2. 10亿个数中找出最大的10000个数

    转载自  海量数据处理 - 10亿个数中找出最大的10000个数(top K问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅 ...

  3. 10亿个数中找出最大的10000个数(top K问题)

    原博链接: https://blog.csdn.net/cbjcry/article/details/84917432 问题引入:10亿个数中找出最大的10000个数(top K问题) top K问题 ...

  4. 从十亿个数中找出前1000个最大的数的算法

    10亿个数中找出1000个最大的数的算法思路: 1,先拿出前1000个数字,并排序,找出最小值为 minValue .    2,  然后再依次拿出1000个数字,找出最大值为 tempMaxValu ...

  5. 1亿个数中找出最大的100个数(top K问题)

    如何在1亿个数中找出最大的100个数(top K问题) ​ 最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序.但是在32位的 ...

  6. 从一亿个数中找出最大的一万个数或最小的一万个数

    1 从一亿个数中找出最大的一万个数:(前10000个元素构建最小堆,后续元素与根节点比较,大于放进去,小于或等于不处理) 用前一万个数初始化一个固定大小为10000的最小堆,这时根节点是这10000个 ...

  7. ACMNO.33 C语言-最大值3 分别用函数和带参的宏,从三个数中找出最大的数。

    题目描述 分别用函数和带参的宏,从三个数中找出最大的数. 输入 3个实数 输出 最大的数,输出两遍,先用函数,再用宏. 保留3位小数. 样例输入 1 2 3 样例输出 3.000 3.000 来源/分 ...

  8. C++100w个数中找出最大的前K个数

    /*100w个数中找出最大的前K个数*/ #include <iostream> using namespace std; #include <assert.h> const ...

  9. 谈从10亿个数中找出前10万个最大的

    谈从10亿个数中找出前10万个最大的 期的实验显示10亿个浮点数大概占据3G左右的空间,因此全部一次性读入内存目前在个人PC上是不太现实的.本次讨论不考虑内存等等,只考虑算法. 如果一次性比较排序,然 ...

  10. 分别用函数和带参的宏,从三个数中找出最大的数。

    题目描述 分别用函数和带参的宏,从三个数中找出最大的数. 输入 3个实数 输出 最大的数,输出两遍,先用函数,再用宏. 保留3位小数. 样例输入 1 2 3 样例输出 3.000 3.000 #inc ...

最新文章

  1. oracle rac应急_Support for Oracle RAC 框架资源组故障
  2. Javascript cookie使用详解
  3. oracle 创建 触发,Oracle 创建触发器
  4. python【蓝桥杯vip练习题库】BASIC-20 数的读法
  5. Virtual PC 使用指南
  6. 大数据驱动下的微博社会化推荐
  7. java浮点数原理,浮点型数据存储原理
  8. 广东网络借贷中介整改验收,留给平台的时间只有8天!
  9. oracle中defined,Oracle:专栏定义(Oracle: column ambigously defined)
  10. html跳转网页为什么网页无法访问,朋友的网站被网址跳转,导致官网无法正常访问...
  11. 统计消息总数_2019年度我国出国留学人员总数为70.35万人
  12. Python 爬取分析全国 12 个城市 4 万条房价信息,告诉你该怎样买房?
  13. Python得到n个从start到end的不重复随机数(set实现)
  14. gstreamer之RTSP Server test-mp4正确运行代码
  15. sql server 2008完全卸载工具
  16. linux自带perl加密,关于加密:如何在Perl脚本中加密或隐藏密码?
  17. 红米手机计算机软件,详解红米手机连接电脑方法
  18. GreenPlum ANALYZE
  19. 年薪30W+,数据库工程师凭什么?
  20. 【网易有数】BI数据分析工具一

热门文章

  1. springMVC helloworld入门
  2. iOS UITabBarController
  3. ASP.NET 推荐书籍
  4. ASP.NET中DownLoad处理
  5. 域内,如何限制一台电脑只能指定的域用户登录
  6. commons-logging slf4j log4j 区别
  7. Python云端系统开发入门 pycharm代码
  8. Eclipse 2017最佳20个插件
  9. Spark学习笔记6:Spark调优与调试
  10. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)...