#include <iostream>
#include <algorithm>
using namespace std;
void find(int a[],int l,int r,int k)
{
if(l>=r) return;
int i=l-1,j=r+1;
int x=a[l];
while(i<j)
{
do i++; while(a[i]<x);
do j--; while(a[j]>x);
if(i<j) swap(a[i],a[j]);
}
int p=j-l+1; //j只是一个索引 所以用p标记j是第几个数
if(p==k) cout<<a[j];
else if(k<p) find(a,l,j-1,k); //左
else if(k>p) find(a,j+1,r,k-p); //右 注意k-p
}
int main()
{
int n,k,a[100];
cin>>n>>k;
for(int i=0;i<n;i++) cin>>a[i];
find(a,0,n-1,k);
return 0;
}
PTA第k小的数 (快排)
最新推荐文章于 2024-09-04 15:29:39 发布