BFPRT算法求第k大数

偶然间看到的东西,简单的看了看,不明觉厉……查了些资料,留待以后学习。

BFPRT算法_小彰_百度空间

十四、第三章再续:快速选择SELECT算法的深入分析与实现 - 结构之法 算法之道 - 博客频道 - CSDN.NET

找最小的K个数 - Stay hungry, Stay foolish - 博客频道 - CSDN.NET

线性查找算法,BFPRT 算法_const void * const pHeart=new(myheart) you("love");_百度空间

以下一段代码转自:http://yoyo.is-programmer.com/posts/8207.html

#include 
#include 
using namespace std;

/***************************************
* 选择第k小元素算法
*
* 输入:元素数组A[],元素个数n,求的k
* 输出:第k小元素
***************************************/
template
Type select (Type A[], int n, int k)
{
	int i,j,s,t;
	Type m,*p,*q,*r;
	if (n<38)
	{ //     如果元素个数小于38:则直接排序
		sort(A,A+n);
		return A[k-1];
	}
	p = new Type[3*n/4];
	q = new Type[3*n/4];
	r = new Type[3*n/4];
	for ( i=0; im把数组分成三组
		if(A[t]k)
	{  //      若k=k)
		{ //   若ii+j,则该元素在r数组中,进入r继续寻找
			return select(r,s,k-i-j);
		}
	}
}

/***************************************
* 计算中值元素
*
* 输入:元素数组A[],组号i
* 输出:存放中值元素的数组p[]
***************************************/
template 
void mid (Type A[], int i, Type p[])
{
	int k = 5*i;
	if (A[k]>A[k+2])
		swap(A[k], A[k+2]);
	if (A[k+1]>A[k+3])
		swap(A[k+1], A[k+3]);
	if (A[k]>A[k+1])
		swap(A[k],A[k+1]);
	if (A[k+2]>A[k+3])
		swap(A[k+2],A[k+3]);
	if (A[k+1]>A[k+2])
		swap(A[k+1],A[k+2]);
	if (A[k+4]>A[k+2])
		p[i] = A[k+2];
	else
	{
		if (A[k+4]>A[k+1])
			p[i] = A[k+4];
		else
			p[i] = A[k+1];
	}
}

int main ()
{
        int n,m;

        cout<<"请输入数组元素个数:";
        cin>>n;

        cout<<"请输入要求的k:";
        cin>>m;

        int *A = new int[n];
        int i;

        cout<<"请输入数组元素:"<>A[i];
        }

        cout<<"第"<第m大元素

        return 0;
}


你可能感兴趣的:(学习轨迹,搜索)