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

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

借助快速排序的思路,可以实现一种查找算法, 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  ==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值