TopK—返回第K小(大)的数字
给定一个数组,返回数组中第K小(或者第K大)的数字,比较经典的TopK问题。
快排选择
基于快排的思想,partition函数每次将切分元素放置到正确位置pos:当我们需要的K>pos时,代表我们需要再从(pos,right]中查找;当K
最小(大)堆
基于堆排序的思想,当我们需要查找第K小(大)的数字时,我们将数组前K个元素构建成最大(小)堆,则堆顶元素是前K个数字中最大的(也就是第K小的),再从数组第K+1个元素开始遍历,如果元素小(大)于当前堆顶元素,则交换到堆顶,再调整堆,维护最大堆,当遍历完数组后,堆顶元素就是整个数组中第K小的元素。
代码:
#include<iostream>
using namespace std;
void exchange(int a[],int i,int j);
int partition(int a[],int lo,int hi);
int quick_selector(int a[],int k,int size)