#include<iostream>
using namespace std;
int partition(int a[],int left,int right)
{
const int pivot= a[left];
while(left < right)
{
while(left < right && a[right]>=pivot) right--;
a[left]=a[right];
while(left < right && a[left]<=pivot) left++;
a[right]=a[left];
}
a[left]=pivot;
return left;
}
int findKth(int a[],int left,int right,const int k)
{
//from 1 begin
int ret=0;
while((ret=partition(a,left,right))!=(k-1))
{
if(ret < k-1) { left=ret+1;}
if(ret > k-1) { right=ret-1;}
}
return ret;
}
int main()
{
int a[]={5,2,1,3,6,9,8,7,4};
int len=(sizeof(a)/sizeof(*a));
cout<<a[findKth(a,0,len-1,5)]<<endl<<endl;
for(int i=0;i!=len;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
找出第K大的数
最新推荐文章于 2021-04-13 09:31:46 发布