justinjia @ 2020-11-29 19:52:44
为各位大佬献上代码:
#include"stdio.h"
int a[5000000];
void quicksort(int start,int end,int k){
if(start==end){
a[k]=a[start];
return;
}
int t,i=start,j=end;
const int pivot=a[(start-end)/2];
do{
while(a[i]<pivot)
i++;
while(a[j]>pivot)
j--;
if(i<=j){
t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
}while(i<=j);
if(k<=j)
quicksort(start,j,k);
else if(i<=k)
quicksort(i,end,k);
else
quicksort(j+1,i-1,k);
}
int main(void){
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1,k);
printf("%d",a[k]);
return 0;
}
by Yaixy @ 2020-11-29 20:01:27
这个头文件什么鬼
by Chinshyo @ 2020-11-29 20:02:41
为啥要自己写sort啊。您可以直接使用这个头文件
#include<algorithm.h>
里面自带
by Chinshyo @ 2020-11-29 20:03:06
@justinjia
by Chinshyo @ 2020-11-29 20:05:18
@沐雪_yxy 这不是C语言的头文件嘛qwq
by Chinshyo @ 2020-11-29 20:09:50
@justinjia 这道题不建议您使用这种方法,可以用插入排序。这样有简洁速度又快
by joy2010WonderMaker @ 2020-11-29 20:14:24
sort直接解过不了,加个O2快得很。 下面附代码(有解释)。
#include<cstdio>
#include<algorithm>
using std::sort;//大大减少调用时间,在O2里有大用
int main(){
int n,k;
scanf("%d%d",&n,&k);//C语言版输入
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
int u=0;
sort(a,a+n);
printf("%d",a[k]);//C语言版输出
return 0;//结束
}
可能有点问题,但很好用。
by joy2010WonderMaker @ 2020-11-29 20:15:22
@远刃YR彡,插排还是会TLE.
by justinjia @ 2020-11-29 20:18:25
@远刃YR彡 到底为啥RE啊???
by joy2010WonderMaker @ 2020-11-29 20:35:52
@justinjia 你在C++里用C语言头文件……
by cxqghzj @ 2020-11-29 20:58:08
@joy2010 ?不可以吗
而且他不是用的C++啊,他用的C语言