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;
}
上一篇:PHP while 循环


下一篇:Java基础13----循环语句