题目描述
从10亿个随机整数中,找出前1000个最大数,要求以最小的时间复杂度及空间复杂度实现该需求。
解题思路
这道题的解决思路是将无序整数排列为有序序列,升序或降序,从中取出前1000个最大数。适用的排序算法包括:
- 插入排序、选择排序、冒泡排序、快速排序等,时间复杂度:
- 堆排序、归并排序,时间复杂度:
本题需要实现的是找出前1000个最大数,空间上可以只做1000条最大目标数组,其他数据与目标数组进行比较,如果比较值小于目标数组最小值,则抛弃。否则将最小值替换为比较值,并使用排序算法完成数据排序。 本题采用算法为构建一个大小为1000的小顶堆排序(读者可自行查阅堆排序相关资料) 。空间复杂度:
。排序算法及时间复杂度参考见下图:
排序方法 |
时间复杂度(平均) |
时间复杂度(最坏) |
时间复杂度(最好) |
空间复杂度 |
稳定性 |
复杂性 |
直接插入排序< |