题目:分析求解topk(big)问题时 堆排序 和 快速排序 的使用场景
快速排序求解
这种算法利用了快速排序的主要思想:每次调用快速排序的partition函数后将会得出一个数n的最终位置,比较n及其右边所有数的总个数与目标个数k
若大于k,则对数n右边的数构成的数组调用partition函数;
若等于k,则说明n及其右边的数就是我们想要得到的那k个数,排序结束;
若小于k,这说明最终的k个数中还包含了n左边的数,对n左边的数构成的数组调用partition函数。
Pyhton代码:
import numpy as np
def qselect(A, k):
if len(A) < k:
return A
pivot = A[-1]
tmp = A[:-1][A[:-1] >= [pivot]]
right = np.insert(tmp, 0, pivot)
try:
rlen = len(right)
except: