首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法
[单选题]
从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中最快的方法是()
快速排序
堆排序
归并排序
基数排序
查看答案及解析
添加笔记
求解答(53)
邀请回答
收藏(1693)
分享
25个回答
添加回答
101
AlexNeverStop
用堆排序最好,因为堆排序不需要等整个排序结束就可挑出前50个最大元素,而快速排序和基数排序都需等待整个排序结束才能知道前50个最大元素。
发表于 2017-07-02 17:42:23
回复(0)
90
新玥
快速排序:选取一个基准数,序列最左边和最右边分别设置一个探针i,j。先从右往左找一个小于基准数的数,再从左往右找一个大于基准数的数,然后交换他们。继续从右向左重复以上过程,直至两探针相遇。最后基准数与两探针相遇位置的数进行交换。一轮排序结束后,基准数将序列分为两部分,左边的数都小于基准数,右边的数都大于基准数。平均复杂度为O(nlogn),最坏为O(n^2)。 ********************************************** 堆排序:不稳定排序,复杂度O(nlogn)。升序采用大顶堆(每个结点的值都大于或等于其左右孩子结点的值),降序采用小顶堆。从最后一个非叶子结点开始,从左至右,从下至上调整成堆结构。一轮排序后,无序序列被构造成了一个堆,堆顶(根结点)元素为该趟排序序列最大或最小值,然后将堆顶元素与末尾元素进行交换。对剩余结点继续作上述调整。 ********************************************** 归并排序:时间复杂度O(nlogn)。将待排序序列分成两组,只需使两组分别有序,然后将两组有序数列合并完成排序。采用递归分解数列,当分出来的组只有一个数据时认为该组有序,然后依次合并相邻小组。 ********************************************** 基数排序:稳定排序。时间复杂度O(d(n+r))。r为基数,d为位数。依次对各个位进行排序,位数不足的补齐。分为最低位优先法(LSD)和最高位优先法(MSD)。分配: 先从个位开始,根据位值分别放入0-9号桶中。收集:将桶中的数据按顺序放到数组中。同一桶中按放入顺序取出(稳定排序)。
编辑于 2018-09-19 16:37:13
回复(8)
14
不再是全聚德
堆排序建堆需要o(n),每次取最大需要o(lgn),所以只要o(n+10lgn)
基数排序需要全部排好才能取出10个最大的,o(d(n+k))
明显是堆排序比较快啊
发表于 2017-04-15 16:05:15
回复(1)
13
=..=
选快排吧 快排有一种不需要全部排序的算法,只需要得到倒数第十个位置就可以了啊
发表于 2017-07-18 09:25:40
回复(7)
11
Yobe
https://www.cnblogs.com/onepixel/articles/7674659.html
发表于 2019-03-09 15:02:11
回复(1)
10
Snowly
D,题目不在乎空间只要速度,没记错应该是基数排序最快且稳定。
如果结合实际(顾及空间开销)考虑的话,我会选择堆排序,因为ABC时间复杂度(O(N*logN))虽然一样,但是堆排序在建堆(时间复杂度近似O(N))之后取十次大根堆的堆顶就行了,即不需要执行完整个堆排序,但A和C需要走完排序流程后才能取到最大十个元素。
PS:总结起来就是,这个题目我选D,仅在只看时间开销时,但实际情况多用堆排序。
编辑于 2017-02-23 16:55:56
回复(1)
4
HarlanZhou
堆排序就是变向的二叉树吧,所以堆排序快!
发表于 2017-11-05 09:06:05
回复(0)
4
编程小白
快排,如果是非随机取划分值,对于数组接近顺序的情况要会退化为n2。随机取划分值,概率上可以提供接近On的复杂度(n+n/2+n/4+...+10)。 堆排序建堆时间接近On,取最大值并调整为Olgn,所以C耗时为n+10*lgn。 基数排序前提是数组元素为整型,对于double和float,甚至是非内置数据类型不适用。 但是快排对于***的利用更好(顺着访问),堆排序(跳着访问),常数上快排小。 所以考虑常数的话,快排也许好一些(其实我觉得这种题挺没意思的。。)
发表于 2017-02-25 07:45:59
回复(0)
3
卡布奇诺赛高
这题题意可能不是很清除,和队友讨论了一晚上大致理解了答案.
首先,快排复杂度O(nlogn)~O(n²),挺基础的不解释了
归并稳定O(nlogn)
堆排序复杂度是O(n)~O(nlogn),当阳寿插入,即插入每一个元素都不会改变堆结构,那么完全无需维护,此时就是建立一个节点为n的树,复杂度O(n),当插入的每个元素都会被旋转到根节点时复杂度O(nlogn)
基排的争议最大,一开始按O(n)算的,后来发现其实准确来说是O(nlog(n)m),log是以10为底,m是桶数,因为对纯数字排序log(n)最大19,m为10所以一般情况省略,但题目中没有保证所有元素均为数字,所以m和log(n)的复杂度是需要计入的,并且可能会出现无法使用基数排序的情况(毕竟可能需要很多的桶).
编辑于 2021-05-08 22:43:11
回复(0)
3
醉倒在柏油路上
快排,归并,基数 都是必须得全部排序完成才能确定最大的10个元素,再提及一个没涉及的 冒泡排序 需要执行10趟冒泡才能得到10个最大 而堆排序只需调整10次大根堆就ok 调整时间和树高成正比 所以堆排! 信我就vans
发表于 2020-11-10 23:06:43
回复(0)
2
夏了夏天_0502
有问题吧,应该是堆排序或者选择排序吧
发表于 2017-02-06 23:44:32
回复(0)
2
dragonaxz
STL有一个nth_element就是这样的功能,用的是快排的实现,个人认为堆也可以,但是没做过统计不知道哪个快,但是无序的数组可能还是快排好一点吧。
发表于 2016-12-13 14:39:50
回复(5)
2
鲍礼彬hadoop
b
发表于 2016-11-20 23:46:04
回复(0)
1
yyyylem
拉倒吧,这题用快排,logN就可以实现,堆排序建立堆就需要N时间~
发表于 2020-05-16 21:52:16
回复(0)
0
launchpad
这题只能说是利用小顶堆的性质来实现Top-K,根本就不是对排序算法的考察,原数组的排序也没有改变
发表于 2025-12-10 15:39:22
回复(0)
0
在打卡的秋田犬很想拿
堆排不是要先构建小根堆大根堆吗,这个排序不算时间吗
发表于 2025-10-13 01:09:34
回复(0)
0
Jur__Cai
堆排序建堆均摊是
的
发表于 2022-11-04 19:23:57
回复(0)
0
庄伟标
堆排序选出最大值的复杂度是调整堆的复杂度为O(log n)
发表于 2022-08-22 07:28:39
回复(0)
0
北方华创微电子内推码IZBJ0J
假如基数排序从最高位开始排,是不是不用等排好序就能选出前十个最大的元素。
发表于 2022-07-20 15:50:15
回复(0)
0
mmms丶
今年408考研题目,这种大数据里面选出最大最小的,就应该用堆排序,选出最大的用小根堆,每次比较与最小的堆顶比较。反之用大根堆。
发表于 2022-04-10 13:09:14
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
数组
排序
上传者:
牛100
难度:
25条回答
1693收藏
11553浏览
热门推荐
相关试题
在下列表述中,错误的是()
字符串
树
排序
评论
(43)
在 Spring 声明式事务中(基...
Spring
评论
(1)
在Vue.js自定义组件中,为了实...
Vue
评论
(1)
在CNC铣削编程中,圆弧插补指令用...
机械制造技术
评论
(1)
在Linux字符设备驱动开发中,设...
字符设备
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题