AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 786. 第k个数    原题链接    简单

作者: 作者的头像   不高兴的兽奶 ,  2022-09-21 08:41:52 ,  所有人可见 ,  阅读 1444


2


3

$\huge \color{orange}{成仙之路->}$ $\huge \color{purple}{算法基础课题解}$

可参考: 快速排序

完整代码1: $O(n)$

#include<iostream>

using namespace std;

const int N = 100010;

int n,k,a[N];

int quick_sort(int q[],int l,int r,int k)
{
    if(l>=r) return q[l];

    int i=l-1,j=r+1,x=q[l+r>>1];
    while(i<j)
    {
        while(q[++i]<x);
        while(q[--j]>x);
        if(i<j) swap(q[i],q[j]);
    }

    if(j-l+1>=k) return quick_sort(q,l,j,k);
    return quick_sort(q,j+1,r,k-(j-l+1));
}

int main()
{
    cin>>n>>k;

    for(int i=0;i<n;i++) cin>>a[i];

    cout<<quick_sort(a,0,n-1,k)<<endl;

    return 0;
}

完整代码2: $O(nlogn)$

#include<iostream>

using namespace std;

const int N = 100010;

int n,k,a[N];

void quick_sort(int q[],int l,int r)
{
    if(l>=r) return;

    int i=l-1,j=r+1,x=q[(l+r)>>1];
    while(i<j)
    {
        while(q[++i]<x);
        while(q[--j]>x);
        if(i<j) swap(q[i],q[j]);
    }

    quick_sort(q,l,j),quick_sort(q,j+1,r);
}

int main()
{
    cin>>n>>k;

    for(int i=0;i<n;i++) cin>>a[i];

    quick_sort(a,0,n-1);

    cout<<a[k-1]<<endl;

    return 0;
}

1 评论


用户头像
派大大大星   2024-04-07 21:41         踩      回复

解释一下呗~


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息