直接用快排
2026-08-21 16:49:18
发布于:贵州
0阅读
0回复
0点赞
#include<cstdio>
#include<vector> //数据较大,用vector动态数组来储存数字
int n,m;
using namespace std;
void quick_sort(vector<int> &q,int l,int r){
if(l>=r) return ;
int x = q[ (l+r) >> 1],i = l - 1,j = r + 1,w = 0;
while( i < j ){
do i ++; while( q[i] < x );
do j --; while( q[j] > x );
if( i < j ) w = q[i] ,q[i] = q[j] ,q[j] = w;
}
quick_sort(q ,l ,j),quick_sort(q ,j+1 ,r);
}
int main(){
vector<int> q;
scanf("%d%d",&n,&m ); //scanf()比cin要快很多,tie的话还是不建议,大部分情况下scanf()还是比cin快
for( int i = 0 ;i < n ;i ++ ){
int x;
scanf("%d",&x);
q.emplace_back(x);//emplace_back()直接拼接,省去了push_back()的复制的时间
}
quick_sort(q ,0 ,n-1);
printf("%d ",q[m]);
return 0;
}
这道题数据比较大,那正常开一个const常量来开一个数组的话明显是不够的,但如果想要简洁一点的思路那自然是快排后输出第k大的数
这里空空如也







有帮助,赞一个