基于快排的所有TopK问题简单python模板
Partition函数
首先,先写partition模板
1 | def partition(nums, left, right): |
快速排序
复习一下快速排序:
1 | #快速排序 |
topk切分
将快速排序改成快速选择,即我们希望寻找到一个位置,这个位置左边是k个比这个位置上的数更小的数,右边是n-k个比该位置上的数大的数,我将它命名为topk_split,找到这个位置后停止迭代,完成了一次划分。
1 | def topk_split(nums, k, left, right): |
接下来就依赖于上面这两个函数解决所有的topk问题
获得前k小的数
1 | #获得前k小的数 |
获取第k小的数
1 | #获得第k小的数 |
获得前k大的数
1 | #获得前k大的数 |
获得第k大的数
1 | #获得第k大的数 |
只排序前k个小的数
1 | #只排序前k个小的数 |
只排序后k个大的数
1 | #只排序后k个大的数 |