首页 > 试题广场 >

某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏

[单选题]
某个大型的网络游戏网站,现有几亿用户,为了实时获取前十名游戏分数最高的玩家,使用以下哪个排序算法比较合理()
  • 基数排序
  • 快速排序
  • 二叉排序
  • 堆排序
第一反应是桶排序可惜没有
发表于 2019-10-23 10:29:41 回复(0)
STL实现就是先压入10个元素。储存最小元素的值。如果新的元素的值大于最小值,就先弹出后压入。手动实现也就是用小根堆来实现。复杂度大概是o(n)。每一次更新需要消耗常数时间。
编辑于 2016-09-22 16:16:21 回复(0)
感觉前面的评论的朋友都没有说出问题的本质。
我觉得这道题选择堆排序的根本原因在于需求只说了获取前十名玩家的信息。
除了堆排序之外,其他的排序都不能在单次logN的条件下完成对最大值/最小值的查找。

而堆排序,每次排序的结果就是找到当前堆中的最大/最小值。
因此完成需求的时间复杂度为O(logN)。
当我们需要找到常数级的最大/最小值时,往往堆排序是我们应该最先考虑的

快速排序只有在对整个空间排序完成后才能找出前10名,因而时间复杂度是O(logN).

因此选D
编辑于 2016-03-08 09:43:45 回复(8)
D,参考如下比较表。堆排序时间复杂度和空间复杂度都是最优的。
个人感觉堆排序唯一的缺点就是算法较为复杂,代码量稍大。

排序法

最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序 O(n2) O(n*log2n) 不一顶 O(n)

插入排序

O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)
发表于 2015-12-03 17:40:48 回复(2)
炫头像
各种排序的稳定性,时间复杂度和空间复杂度总结:

发表于 2015-12-08 14:08:40 回复(0)
要注意理解题意。获取前十名的成绩,用堆排序每次取得最大值。
发表于 2016-06-03 21:59:01 回复(0)
我觉得评论中没有人说明使用堆排序到底具体怎么处理;下面我猜想一下,只是猜想。
这是个topk问题,如果使用堆排序的话我觉得应该是这样做的,先从海量数据中选取前k个数据建立小根堆,后面的数据不断的和根顶元素作比较,如果比根顶元素大则替换根顶元素,并重新调整为小根堆,如果比根顶元素小,则继续读取后面的数字。最后按照中序遍历的方式输出堆的内容就是海量数据的前k个数值。这种方式的好处在于空间复杂度为K  时间复杂度为O(nKlogK)
发表于 2017-03-25 10:00:04 回复(0)
用堆排序取得每次的排序的最大值
发表于 2022-01-23 15:39:41 回复(0)
如果不考虑建堆的过程,那么是堆排,如果不考虑space complexity 那么是基排; 其实我觉得最好的是quick select, O(n)时间选出无序的前10个,然后这10个随便一个排序方法排好序就行
发表于 2019-08-07 16:17:09 回复(0)

堆排序:

原理:首先新建一个空列表,在带排序数列中找到最大的数字,将其加在空列表的末尾,并将其从原数列中删除,重复以上步骤,直至原数列为空。效率高,如果只是要找到最大数的话时间复杂度仅仅为O(1)

发表于 2019-01-29 10:24:27 回复(0)
几亿用户的话,用堆来实现应该是最好的吧
发表于 2017-05-04 23:31:22 回复(0)
Top k 类型的排序 堆排序是最合适的吧
发表于 2016-08-27 09:14:22 回复(0)
我个人觉得。。论速度,一般情况应该是鸡排比较快吧,毕竟积分应该就差不多9位数以内吧,建堆要O(nlogn),鸡排大概要O(9n)这样,应该是鸡排会比堆排要快。但是鸡排需要更多的额外空间,所以才不用的吧,毕竟几亿个用户。。。
发表于 2016-05-13 22:04:08 回复(0)
我觉得基数排序吧。最高分就几个………
发表于 2016-04-01 12:26:38 回复(0)
我是想到堆排序有大顶堆和小顶堆,这样可以快速知道游戏分数最高的玩家,不知道这么理解有没有道理?
发表于 2016-03-21 14:52:48 回复(0)
D
发表于 2015-12-05 19:11:04 回复(0)
选D无疑,,题目只需要前10名 不需要完整的排名,用小顶堆弹出10次,完美解决
发表于 2015-12-03 22:43:56 回复(0)
C
发表于 2015-12-03 10:16:25 回复(1)