求topk 比较使用的两种办法
1,维持一个K个结点的堆,然后把所有数都过一遍即可。时间复杂度O(nlogK)
2, 采用类似排序的思路。将数据分成两半,中枢元素左边小于中枢,右边大于中枢。返回中枢下标。若中枢刚好是第K个,则返回。若大于K则在左边一般递归。若小于K,则在右边一般递归求第K-中枢下标 大的元素。 平均时间复杂度 O(n) 算法导论有证明。若选好枢纽元 则可以保证最坏情况下也是O(n)的。选中位数的中位数为枢纽元。
3,STl 中有库函数 _nth_element 返回第n大的元素 貌似采用的是类快排的算法。