刚刚开始学快排,样例过了,但是在#4上WA了
#include<cstdio>
using namespace std;
long long a[5000010],t;
void part(long long l,long long r,long long k){
long long i = l,j = r,flag = a[(l+r)/2];
while (i<j)
{
while (i<j && a[j] >= flag) j--;
while (i<j && a[i] <= flag) i++;
t = a[i];
a[i] = a[j];
a[j] = t;
}
t = flag;
a[(l+r)/2] = a[i];
a[i] = t;
if (k > i) part(i+1,r,k);
if (k < i) part(l,i-1,k);
if (k == i)
{
printf("%lld",a[i]);
return ;
}
}
int main(){
long long n,k;
scanf("%lld %lld",&n,&k);
for (long long i = 1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
part(1,n,k);
return 0;
}