![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9f9fddefdf9bf694ace6e6d31bbf8bb6.png)
方法1:排序–时间复杂度不好
O(N*logN)–底层是快排
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d17bbd1ba822ed3fd9db195fd23ba08e.png)
- 降序
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/9b22d0a35ec8b1e12a1b8b0fc777d333.png)
或者
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e6b25c5ff130a13455f83f5eb23a66a6.png)
方法2:优先级队列–空间复杂度不好
O(N+klogN)–建堆为N,每次出数据向下调为logN,出k次为klogN
空间复杂度为O(N)–k个数大堆底层要存储
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/69b62692a1a18561bfa1afc84bf9f957.png)
方法3–最优方法
*时间复杂度:O(K+(N-k)logK)–建立k个数的小堆,N-K个数进行pop和push再调整k个数的小堆
空间复杂度:O(k)–建立k个数的小堆
当N远大于K时,这种方法更有。尤其是N大到内存中存不下必须使用这种方法,前两个方法用不了,因为第三种只需要存储k个数
加粗样式
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/10842683d0863907c13ef5e697f5f50a.png)