希望用最快的速度从一个无序数组中挑选出其中前十个最大的元素,在以下的排序方法中(B)
快速排序
堆排序
归并排序
基数排序
题目不在乎空间只要速度,没记错应该是基数排序最快且稳定。
如果结合实际(顾及空间开销)考虑的话,我会选择堆排序,因为ABC时间复杂度(O(N*logN))虽然一样,但是堆排序在建堆(时间复杂度近似O(N))之后取十次大根堆的堆顶就行了,即不需要执行完整个堆排序,但A和C需要走完排序流程后才能取到最大十个元素。
假设你只有100MB的内存,需要对1GB的数据进行排序,最合适的算法是()
首先内存只有100Mb,而数据却有1Gb,所以肯定没法一次性放到内存去排序,只能用外部排序,而外排序通常是使用多路归并排序,即将原文件分解成多个能够一次性装入内存的部分(如这里的100Mb),分别把每一部分调入内存完成排序(根据情况选取适合的内排算法),然后对已经排序的子文件进行多路归并排序(胜者树或败者树)。