Leibyi_233 @ 2022-07-30 21:15:38
前两个AC,后两个WA
#include<iostream>
#include<algorithm>
using namespace std;
int a[500500], n, k;
void sort(int* a, int l, int r);
int main()
{
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, 0, (n-1));
cout << a[k];
return 0;
}
void sort(int* a, int l, int r)
{
if (l >= r)return;
int newl = l, newr = r, flag = a[(l + r) / 2], tmp;
do {
while (a[newl] < flag)newl++;
while (a[newr] > flag)newr--;
if (newl <= newr)
{
tmp = a[newl];
a[newl] = a[newr];
a[newr] = tmp;
newl++;
newr--;
}
} while (newl <= newr);
if (newr > l)sort(a, l, newr);
if (newl < r)sort(a, newl, r);
}
by 野生小卒 @ 2022-07-30 21:28:40
有没有一种可能 你数组开小了一位
by 野生小卒 @ 2022-07-30 21:29:50
改了之后会TLE,可以考虑一下有没有办法把两个递归调用分支的其中一个优化掉
by Leibyi_233 @ 2022-07-30 23:13:15
@野生小卒 我试试谢谢大佬