AcWing786.第k个数
题目描述
给定一个长度为 \(n\) 的整数数列,以及一个整数 \(k\),请用快速选择算法求出数列从小到大排序后的第 \(k\) 个数。
输入格式
第一行包含两个整数 \(n\) 和 \(k\)。
第二行包含 \(n\) 个整数(所有整数均在 \(1 \sim 10^9\) 范围内),表示整数数列。
输出格式
输出一个整数,表示数列的第 \(k\) 小数。
数据范围
\(1 \le n \le 100000\),
\(1 \le k \le n\)
输入样例:
5 3
2 4 1 5 3
输出样例:
3
算法
(排序) \(O(nlogn)\)
用std::sort排下序,然后输出排后数组中的第k个数即可
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
int n, a[N], k;
int main()
{
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i ++ )
scanf("%d", &a[i]);
sort(a + 1, a + 1 + n);
printf("%d\n", a[k]);
return 0;
}

浙公网安备 33010602011771号