社区
数据结构与算法
帖子详情
求从n(n>=1000)个数中计算最大的10数的算法,要最快的算法
lettam
2005-09-24 04:02:34
求从n(n>=1000)个数中计算最大的10数的算法,要最快的算法.
...全文
493
23
打赏
收藏
求从n(n>=1000)个数中计算最大的10数的算法,要最快的算法
求从n(n>=1000)个数中计算最大的10数的算法,要最快的算法.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zachary7833
2005-10-04
打赏
举报
回复
是考研的题目吧!我也正好想问。
我开了个新贴继续问大家,大家去看看。
http://community.csdn.net/Expert/topic/4307/4307089.xml?temp=.617901
清华大学考研的答案是:
是用快速排序法,不断的分后半部分(比某个数大的部分),直到这个部分的数量小等于10。不足10个元素在前一部分找相应个数。
(清华大学的数是1500个数好像)
还有一个什么大学也考过(是100000个数),答案是堆排序。
我觉的用堆排序也不慢,只是建堆可能比快速排序慢了。后面选出10个都很快每个都只要longN就能找出。
快速排序偶然性较大,原理上其实和找第k大元素的方法一样。
建堆耗费的时间多还是找第k大元素耗费时间多还真是不一定,我也不知到那个是正确。
那位大哥能分析这本题堆排序和快速排序的平均时间复杂度。
iamltd
2005-09-30
打赏
举报
回复
对这个问题来说,只需要最大的10个
所以选择排序是最快的
虽然普通选择排序是O(n^2)的。但这个问题里面只需要10*n次比较。比其他算法都快
phoenixinter
2005-09-30
打赏
举报
回复
首先,我们知道利用RandomizedSelection可以在O(n)的时间内选出
第k大的数,所以复杂度是O(n)。
当然可以先建堆,然后不停的EXTRACT-MAX,这样的复杂度是O(n+10logn)
也是很小的。
xdop
2005-09-30
打赏
举报
回复
回复人: iamltd(妖) ( ) 信誉:100 2005-09-29 17:02:00 得分: 0
用选择排序,每次选出一个最大的。
只需要10*N次判断比较。仅仅是O(n)的
m=10
普通选择排序应该是 O(n*m)
zhangts
2005-09-30
打赏
举报
回复
是找10个数,又不是全部,为什么要全部排序?
赞同“一怒吧剑”的做法,排序10个数,接下来就是查找问题了
chenyec
2005-09-29
打赏
举报
回复
排个序就行了
iamltd
2005-09-29
打赏
举报
回复
用选择排序,每次选出一个最大的。
只需要10*N次判断比较。仅仅是O(n)的
Zephyrzzz
2005-09-29
打赏
举报
回复
用堆不好吗,建堆O(n),找数O(mlogn),不过理论上用找第k大数方法复杂度低些.
xdop
2005-09-27
打赏
举报
回复
复杂度应该能到O(m+n)
yelling
2005-09-27
打赏
举报
回复
找到第10大的数,用O(n)的算法怎么做?
gnefuil
2005-09-26
打赏
举报
回复
先找到第10大的数,然后在遍历一遍把大于等于它的找出来
以上两步都是O(n)的
boxer_tony
2005-09-26
打赏
举报
回复
Donald E. Knuth在他的书《计算机程序设计艺术》里面进行了较为详细的阐述,大家可以看看
xiaocai0001
2005-09-24
打赏
举报
回复
不知道楼主用的是什么测试程序
我写的一个
快速排序的要比冒泡的快5位左右
其中n=100000, m=10
yelling
2005-09-24
打赏
举报
回复
基本上复杂度在o(m*n)
要优化,比如记一下十个数中的最大值,最小值等等
再快的话,除非m比较大,用数来换链表,可以到o((logm)*n)
hwman
2005-09-24
打赏
举报
回复
用10个元素的数组,用淘汰的方法,复杂度大约n log 10
xiaocai0001
2005-09-24
打赏
举报
回复
快排不是让它排成完全有序的~
lettam
2005-09-24
打赏
举报
回复
快速排序不能满足需求,还是太慢了, yelling(Ray)说的算法我也用过,速度比快排要快点,但是也不能达到目标,需要更快的算法,麻烦大家多出主意
xiaocai0001
2005-09-24
打赏
举报
回复
按平均复杂度
冒泡的是O(m*n)
快排的是O(n*log(n/m))
当m<log2(n/m)时选择冒泡,否则选择快排
针对本题,log2(1000/10) < 10, 所以选择快速排序, 平均效率会更好些的
xiaocai0001
2005-09-24
打赏
举报
回复
这个可以比较一下
至于用什么样的算法是根据M,N的值的
冒泡的复杂度是O(m*n)
快排的最差复杂度是O(n*(n-m)), 最好可能一次完成~~
javan
2005-09-24
打赏
举报
回复
冒泡排序算法,当找到第10个最大元素时,停止。
加载更多回复(3)
自动驾驶运动规划(Motion Planning).pdf
自动驾驶运动规划(Motion Planning)问题分析
财务
数
据分析模型6.xlsx
Excel
数
据看板,Excel办公模板,Excel模板下载,Excel
数
据统计,
数
据展示
人力资源
数
据分析看版.xlsx
Excel
数
据看板,Excel办公模板,Excel模板下载,Excel
数
据统计,
数
据展示
重庆大学2011-2012(2)
数
字电子技术II.pdf
重庆大学期末考试试卷,重大期末考试试题,试题及答案
随波逐流CTF编码工具 V5.6 20240424.rar
由随波逐编写开发,CTF编码工具为用户提供丰富的离线加密解密功能,还可以对字符编码进行转换,文件隐写查看,用户可以根据自己的需
求
来使用功能,非常实用,能够提高大家的工作效率!
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章