原代码(#5 1130ms):
#include <bits/stdc++.h>
using namespace std;
int k;
int a[5000005];
void sort(int l,int r) {
int i = l,j = r,flag =a[(l+r)/2];
do {
while(a[i] < flag) i++;
while(a[j] > flag) j--;
if(i <= j)
{
swap(a[i],a[j]);
i++;j--;
}
}while(i<=j);
if(k+1 <= j) sort(l,j);
else if(k+1 >= i) sort(i,r);
else{
printf("%d" , a[k+1]);
exit(0);
}
}
int main(){
int n;
scanf("%d%d" , &n , &k);
for(int i=1;i<=n;++i) scanf("%d" , &a[i]);
sort(1,n);
return 0;
}
该了个数(#5 343ms):
#include <bits/stdc++.h>
using namespace std;
int a[5000005],k;
void sort(int l,int r) {
int i = l,j = r,flag =a[(l+r)/2];
do {
while(a[i] < flag) i++;
while(a[j] > flag) j--;
if(i <= j)
{
swap(a[i],a[j]);
i++;j--;
}
}while(i<=j);
if(k <= j) sort(l,j);
else if(k >= i) sort(i,r);
else{
printf("%d" , a[j+1]);
exit(0);
}
}
int main(){
int n;
scanf("%d%d" , &n , &k);
for(int i=0;i<n;++i) scanf("%d" , &a[i]);
sort(0,n-1);
return 0;
}