#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int Find(int array[],int start,int end,int k){
int temp=array[start];
int i=start,j=end-1;
while(i!=j){
while(i<j&&array[j]<=temp)
j--;
while(i<j&&array[i]>=temp)
i++;
if(i<j){
int t=array[i];
array[i]=array[j];
array[j]=t;
}
}
array[start]=array[i];
array[i]=temp;
//for(int i=0;i<5;i++)
// cout<<array[i]<<' ';
//cout<<endl;
if(i-start+1==k)
return array[i];
else if(i-start+1>k){
//cout<<start<<' '<<end<<' '<<k<<':';
return Find(array,start,i,k);
}
else{
//cout<<start<<' '<<end<<' '<<k<<':';
return Find(array,i+1,end,k-(i-start+1));
}
}
int main(){
第K大元素(分治法)
最新推荐文章于 2021-11-24 20:16:14 发布
本文总结了查找第K大元素的四种方法,包括排序、预先选取k个元素排序、分治策略和利用堆(相当于堆排序)。通过这些方法,可以有效地在数据集中找到第K个最大值。
摘要由CSDN通过智能技术生成