排序的选择问题

希望用最快的速度从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中(B)
快速排序
堆排序
归并排序
基数排序

题目不在乎空间只要速度,没记错应该是基数排序最快且稳定。
如果结合实际(顾及空间开销)考虑的话,我会选择堆排序,因为ABC时间复杂度(O(N*logN))虽然一样,但是堆排序在建堆(时间复杂度近似O(N))之后取十次大根堆的堆顶就行了,即不需要执行完整个堆排序,但A和C需要走完排序流程后才能取到最大十个元素。



假设你只有100MB的内存,需要对1GB的数据进行排序,最合适的算法是()

首先内存只有100Mb,而数据却有1Gb,所以肯定没法一次性放到内存去排序,只能用外部排序,而外排序通常是使用多路归并排序,即将原文件分解成多个能够一次性装入内存的部分(如这里的100Mb),分别把每一部分调入内存完成排序(根据情况选取适合的内排算法),然后对已经排序的子文件进行多路归并排序(胜者树或败者树)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值