快速排序
快速排序,双指针算法+递归
#include<iostream>
#include<algorithm>
using namespace std;
void quick_sort(int a[],int l,int r)
{
if(l>=r)return;//停止递归条件
int i=l-1,j=r+1;
int x=a[l+r>>1];//取中间值
while(i<j)
{
while(a[++i]<x);//从左查找第一个>=x的数
while(a[--j]>x);//从右查找第一个<=x的数
if(i<j)swap(a[i],a[j]);//i>=j说明排序完成
}
quick_sort(a,l,j);//继续对前半部分排序
quick_sort(a,j+1,r);//继续对后半部分排序
}
int main()
{
int n,k;
cin>>n>>k;
int i;
int a[100005];
for(i=0; i<n; i++)
{
cin>>a[i];
}
quick_sort(a,0,n-1);
cout<<a[k-1]<<endl;
return 0;
}