AcWing 786.第K个数

若如初见. 提交于 2019-12-18 21:55:36

题目链接

#include<iostream>
using namespace std;
const int N = 100010;
int q[N];
int n, k;
int quick_sort(int q[], int l, int r, int k)
{
    if(l == r)
        return q[l];
    int x = q[l + r >> 1];
    int i = l - 1, j = r + 1;
    while(i < j)
    {
        while(q[++i] < x)
            ;
        while(q[--j] > x)
            ;
        if(i < j)
            swap(q[i], q[j]);
    }
    int sl = j - l + 1;
    if(sl >= k)
        return quick_sort(q, l, j, k);
    else
        return quick_sort(q, j + 1, r, k - sl);
}
int main()
{
    cin >> n >> k;
    for(int i = 0; i < n; i++)
        scanf("%d", &q[i]);
    cout << quick_sort(q, 0, n-1, k); //quick_sort直接返回第K个数
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!