洛谷-P1923 【深基9.例4】求第 k 小的数
洛谷-P1923 【深基9.例4】求第 k 小的数
题目描述
输入 \(n\)(\(n<5000000\) 且 \(n\) 为奇数) 个数字 \(a_i(0<a_i<10^9)\) ,输出这些数字的第 \(k\) 小的数。最小的数是第 0 小。
输入格式
无
输出格式
无
输入输出样例
输入 #1
5 1
4 3 2 1 5
输出 #1
2
C++代码
#include <cstdio>
using namespace std;
int a[5000000];
int find_kth(int l, int r, int k) {
int key = a[l];
int low = l, high = r;
while (high > low) {
while (a[high] >= key && high > low)
--high;
a[low] = a[high];
while (a[low] <= key && high > low)
++low;
a[high] = a[low];
}
a[low] = key;
if (k == low)
return a[low];
else if (k < low)
return find_kth(l, low-1, k);
else
return find_kth(low+1, r, k);
}
int main() {
int n, k;
scanf("%d%d", &n, &k);
for (int i=0; i<n; ++i)
scanf("%d", &a[i]);
printf("%d\n", find_kth(0, n-1, k));
return 0;
}