Go_for_itligli666666 @ 2022-04-14 23:49:10
#include<iostream>
using namespace std;
void QuickSort(int a[],int k,int start,int end){
//cout<<"start="<<start<<" end="<<end<<endl;
if(start>=end){
return;
}
else{
int base=a[(start+end)/2];
int x=start,y=end;
while(x<y){
while(a[y]>base&&y>=x){
y--;
}
while(a[x]<base&&y>=x){
x++;
}
if(y>=x){
swap(a[x],a[y]);
y--,x++;
}
}
if(a[x]<base){x++;}
//cout<<"base="<<base<<" a["<<k<<"]="<<a[k]<<endl;
if(k==x){
return;
}
else if(k<x){
QuickSort(a,k,start,x-1);
}else{
QuickSort(a,k,x,end);
}
}
}
int main()
{
int n,k;
cin>>n>>k;//求n个数字中第k小的数
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
QuickSort(a,k,0,n-1);
cout<<a[k]<<endl;
return 0;
}
by syksykCCC @ 2022-04-15 00:11:33
@Go_for_itligli666666 可能因为 std 是
by 虫洞吞噬者 @ 2022-04-15 00:33:11
5e6的话
by 王熙文 @ 2022-04-15 06:14:53
您的做法仿佛是 O(n) 的,即正解,但用 cin 输入导致超时
by Qiaoqia @ 2022-04-15 06:46:05
更正上面一句:但用没关流同步的 std::cin 导致超时。
by Steven_lzx @ 2022-04-15 07:26:58
@Go_for_itligli666666 开 long long?
by Yukinoshita_Yukino @ 2022-04-15 08:31:04
nlogn确实过不了
by Mzk2333 @ 2022-04-15 08:46:42
nlogn TLE两个点
by Mzk2333 @ 2022-04-15 08:49:24
@ZiShan_ O(2log2n),建议另寻他法
by Go_for_itligli666666 @ 2022-04-15 12:35:01
@王熙文 谢谢。把cin改为scanf就过了。 请问为什么用cin会超时呢?
by 王熙文 @ 2022-04-15 12:44:24
@Go_for_itligli666666 cin 速度慢,原理不知道,记住就行了,一般建议都使用 scanf 或者快读