//找到第K大数
//思想:问题分解(递归实现)
//先快排,左边大于等于基准数,右边小于等于基准数
//左边为s1,右边为s2
int FindKthLargest(int array[],int K,int left,int right)//array为array[left]到array[right]
{
//先快排;左大右小
int i=left;
int j=right;
int base=array[left];
while(i<j){
while(array[i]>=base&&i<=j)
i++;
while(array[j]<=base&&i<=j)
j--;
if(i<j){
int temp;
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
base=array[i-1];
array[i-1]=array[left];
//判断
if((i-2)-left+1>=K)//(i-2)-left+1为是s1大小
FindKthLargest(array,K,left,i-2);
else if((i-2)-left+1<K)
FindKthLargest(array,K-((i-1)-left+1),i,right);
else
return base;
}
找到第K大数
最新推荐文章于 2024-05-17 09:44:32 发布