TopK---返回第K小(大)的数字

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值