//快排思想第k大
#include<iostream>
using namespace std;
int qfind(int *A,int front,int rear)//快排思想快速定位数
{
if(front = rear)
return front;
int i=front,j=rear;
int x=A[i];
while(i<j)
{
while(i<j&&x<A[j])j--;
A[i]=A[j]; //小于X的抛到X左边
while(i<j&&x>A[i])i++;
A[j]=A[i]; //大于X的抛到X的右边
}
A[i]=x;
return i; //返回x的位置
}
int findk(int *A,int front,int rear,int k)//输入求第K大
{
if(k<front)
return A[front];
int q=qfind(A,front,rear);
if(q==k-1) //判断K在那个区间内
return A[q];
else if(q>k-1)
return findk(A,front,q-1,k);
else if(q<k-1)
return findk(A,q+1,rear,k);
}
//快排思想第k大
最新推荐文章于 2021-11-10 16:29:57 发布