思路:本题就是一个快速排序的模板题,通过对数组中的数字进行从小到大排序,从左到右第k个数,但得注意数组下标是从0开始,所以答案应该是排序后数组下标为k-1
如果您还不了解快速排序,请移步这篇文章,https://www.cnblogs.com/expect-999/p/17594345.html
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n,k;
int q[N];
void quick_sort(int q[],int l,int r)
{
if(l>=r) return;
int i=l-1,j=r+1;
int x = q[ (l+r) >> 1];
while(i<j)
{
do ++i; while(q[i]<x);
do --j; while(q[j]>x);
if(i<j) swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
signed main()
{
cin >> n >> k;
for(int i=0;i<n;++i) cin >> q[i];
quick_sort(q,0,n-1);
cout << q[k-1];
return 0;
}
本人蒟蒻,如有错误或者不当的地方还望指点,如果对您有所帮助,请给我点赞,这真的对我很重要,感谢观看我的博客
标签:sort,int,个数,数组,quick,排序 From: https://www.cnblogs.com/expect-999/p/18143416