#include<iostream>
#include<algorithm>
#include<cassert>
using namespace std;
int arr[100];
int partition(int arr[],int l,int r)
{ if(l>=r)
return 0;
int v=arr[l];
int j=l,i=r;
while(j<i)
{
while(j<i&&arr[j]<v)
j++;
if(j<i)
{
arr[j]=arr[i];
i--;
}
while(j<i&&arr[i]>=v)
i--;
if(j<i)
{
arr[j]=arr[i];
j++;
}
}
return j;
}
int selection(int arr[],int l,int r,int k)
{
if(l==r)
return arr[l];
int p=partition(arr,l,r);
if(k==p)
return arr[p];
else if(k<p)
return selection(arr,l,p-1,k);
else
return selection(arr,p+1,r,k);
}
int main()
{
int n,i,k,c;
cin>>n;
int arr[n];
cin>>k;
for(i=0;i<n;i++)
cin>>arr[i];
c=selection(arr,0,n-1,k);
cout<<c<<endl;
return 0;
}
其他部分相同,只在main()函数部分有所改动,为什么不能得到正确的第n大的结果呢?
代码有疑问