$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
整体就是排序后求数组的第$k$个数是多少,可以用上一篇题解的代码,修改一下就行了。
上一篇题解
代码:
#include <bits/stdc++.h>
using namespace std;
int n, q, a[100010];
void quick_sort(int l, int r) {
if (l >= r) return;
int mid = l + r >> 1;
int i = l - 1, j = r + 1, x = a[mid];
while (i < j) {
do i++; while (a[i] < x);
do j--; while (a[j] > x);
if (i < j) swap(a[i], a[j]);
}
quick_sort(l, j);
quick_sort(j + 1, r);
}
int main() {
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
quick_sort(1, n);
cout << a[q];
return 0;
}
交换的条件是不是错了