定义:
从一个大小为N的数组中,选择第K小(大)的数。
常用四种选择算法:
- 排序
- 堆
- 改进快排
- BFPRT算法
排序:
直接将n个数排序,可以使用归并或者快拍。
时间复杂度:O(nlogn)
堆:
维护一个K个元素的最大堆,存储当前遇到的最小的K个数(最小堆的定义)
时间复杂度:O(nlogK)
改进的快速排序:
原理也比较简单,因为快拍的划分操作确定了第j个元素,一次只需要把j和K比较一下,然后选择一边继续就可以了。
时间复杂度:平均时间复杂度为O(n),最坏情况下复杂度为O(n^2)
code
BFPRT算法
BFPRT算法提供了一种最坏情况也能在O(n)的算法。
BFPRT