查找问题整理(2)查找第K大的数Kth Order Statitic

这篇博客介绍了如何利用快速排序的思路来实现Kth Order Statistic算法,即在未排序的数组中查找第K大的元素。区别于top K算法,Kth Order Statistic只需找出一个特定排名的数,而不是K个数。文章重点阐述了该算法的递归实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

借助快速排序的思路,可以实现一种查找算法, Kth Order Statistic,即给定一个未排序的数组,找到数组中第K大的数。

注意这个Kth Order Statistic和top K算法有区别。Top K算法是找到前K大的数,要找K个数。而Kth Order Statistic 是找到第K大的数,只找1个数。

//借助快速排序中的partition函数
int partition_kth(int* arr, int st, int ed){
    int j=st;
    int i=j-1;
    int pivot=arr[ed];
    int temp;
    while (j<=ed-1) {
        if (pivot>arr[j]) {
            i++;
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        j++;
    }

    i++;
    temp=arr[ed];
    arr[ed]=arr[i];
    arr[i]=temp;
    return i;
}

函数主要算法如下,使用了递归的思路

//Kth Order Statistic算法
int kth_order_statistic(int* arr, int st, int ed, int order)
{
    int attemp_order =  partition_kth(arr,st,ed);
    int temp1 =  attemp_order -st+1;
    if (temp1  == order)
        return arr[attemp_order];
    else if ( temp1 < order)
        kth_order_statistic(arr, attemp_order+1, ed, order-temp1);
    //NOTE1:不是 kth_order_statistic(arr, attemp_order+1, ed, order);
    //NOTE2:Kth Order是一个和长度一致的变量,不是一个刻度变量。
    else
        kth_order_statistic(arr, st, attemp_order-1, order);
}
它的main函数如下

int main()
{
int unsorted_arr[10]={10,7,9,6,8,4,11,15,1,5};
    std::cout<<kth_order_statistic(unsorted_arr,0,9,1)<<std::endl;
    std::cout<<kth_order_statistic(unsorted_arr,0,9,7)<<std::endl;
    std::cout<<kth_order_statistic(unsorted_arr,0,9,9)<<std::endl;
return 0;
}
返回结果分别是数组中第1,7,9大的数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值