P1923 【深基9.例4】求第 k 小的数

题目传送门

#include<bits/stdc++.h>

using namespace std;
const int N = 5000010;
int a[N];

void quick_sort(int q[], int l, int r, int k) {
    if (l >= r)return;
    int i = l - 1, j = r + 1, x = q[(l + r) >> 1];
    while (i < j) {
        do i++; while (q[i] < x);
        do j--; while (q[j] > x);
        if (i < j)swap(q[i], q[j]);
    }
    int sl = j - l + 1;
    if (k <= sl) quick_sort(q, l, j, k);//左半部分搜索
    else quick_sort(q, j + 1, r, k - sl);//右半部分搜索
}

int main() {
    //优化输入
    ios::sync_with_stdio(false);
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i++)cin >> a[i];
    quick_sort(a, 0, n - 1, k);
    printf("%d", a[k]);
    return 0;
}
posted @ 2021-11-23 13:51  糖豆爸爸  阅读(34)  评论(0编辑  收藏  举报
Live2D