题目描述
题目分析
通过快排的改造,进行快速选择
代码展示
#include<iostream>
int const maxn=1e5+10;
int q[maxn];
using namespace std;
int quik_sort(int q[],int l,int r,int k)
{
if(l>=r) return q[l];
int i=l-1,j=r+1,x=q[l+r>>1],sl;
while(i<j)
{
while(q[++i]<x);
while(q[--j]>x);
if(i<j) swap(q[i],q[j]);
}
sl=j+1-l;
if(k<=sl) return quik_sort(q,l,j,k);
else return quik_sort(q,j+1,r,k-sl);
}
int main()
{
int n,k; cin>>n>>k;
for(int i=0;i<n;i++) scanf("%d",&q[i]);
printf("%d",quik_sort(q,0,n-1,k));
}