Gongxi12 @ 2023-12-17 13:05:37
#include<iostream>
using namespace std;
long long a[5000010];
int w;
void qs(int l, int r) {
int i = l, j = r;
long long k = a[(l + r) / 2];
while (i < j) {
while (a[i] < k) {
i++;
}
while (a[j] > k) {
j--;
}
swap(a[i], a[j]);
}
if (w < i) {
qs(l, i - 1);
}
else if (w > i) {
qs(i + 1, r);
}
else if (w == i) {
return;
}
}
int main() {
int n;
scanf("%d %d", &n, &w);
for (int i = 0; i < n; i++) {
scanf("%lld", &a[i]);
}
qs(0, n - 1);
printf("%lld", a[w]);
}
by Igunareo @ 2023-12-21 21:31:41
@Gongxi12
swap(a[i], a[j]);前要加if(i<=j),判断完得更新i,j
还有,用do while吧
by sulingfeng @ 2024-01-16 18:49:51
直接sort不行吗