题目描述 输入 nn(1 \le n < 50000001≤n<5000000 且 nn 为奇数)个数字 a_iai?(1 \le a_i < {10}^91≤ai?<109),输出这些数字的第 kk 小的数。最小的数是第 00 小。
请尽量不要使用 nth_element
来写本题,因为本题的重点在于练习分治算法。
输入格式 无
输出格式 无
输入输出样例 输入 #1复制
5 1 4 3 2 1 5
输出 #1复制
2
#include
using namespace std;
long long n[1000000];
int k;
void qswap(int b, int e)
{
int i = b, j = e;
int num = n[(b + e) / 2];
while (i <= j)
{
while (n[i] < num)
i++;
while (n[j] > num)
j--;
if (i <= j)
{
swap(n[i], n[j]);
i++;
j--;
}
}
if (k <= j)
qswap(b, j);
else if (k >= i)
qswap(i, e);
else
cout << n[j + 1];
}int main()
{
int x;
cin >> x >> k;
for (int i = 0;
i < x;
i++)
{
cin >> n[i];
}
qswap(0, x - 1);
return 0;
}
【洛谷|P1923 【深基9.例4】求第 k 小的数】
推荐阅读
- 蓝桥杯往届真题详解|题目 2599: 蓝桥杯2020年第十一届国赛真题-天干地支
- linux系统编程|详解僵尸进程与孤儿进程
- Leetcode|Leetcode70-爬楼梯(C语言)
- 数据结构|数据结构之并查集(含代码实现)
- 一把王者的时间拿捏岛屿问题(dfs)
- LeetCode|LeetCode 2028. 找出缺失的观测数据题解
- 剑指offer进阶|剑指offer103(最少的硬币数目)
- 剑指offer进阶|剑指offer85(生成匹配的括号)
- 蓝桥杯|蓝桥杯——乳草的入侵