您的位置:首页 > 其它

最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。

2014-04-15 12:14 399 查看
最大最小值给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。

用递归的方法可以做。假设需要T(n)的时间求n个数的最大值和最小值,显然T(2) = 1。我们按照分治三步法进行算法设计。

划分把n个数均分为两半。
递归求解求左半的最小值minL 和最大值maxL以及右半最小值minR和最大值maxR。
合并所有数的最大值为maxfmaxL; maxRg,最小值为minfminL; minRg。

程序如下。划分点为m = (l+r)/2,两个区间为[l,m]和[m+1,r](注意不是[l,m-1]和[m,r])

void minmax (int l , int r , int & min , int & max)
{
int minl , minr , maxl , maxr ;
if(r == l){ max = min = a[l ]; }
else if(r == l+1)
{
	if(a[l] > a[r]
		{ max = a[l]; min = a[r]; }
	else
		{ max = a[r]; min = a[l]; }
	}
	else
	{
		int m = (l+r) >> 1;
		minmax (l, m, minl, maxl );
		minmax (m+1, r, minr, maxr);
		max = maxl > maxr ? maxl : maxr ;
		min = minl < minr ? minl : minr ;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: