算法导论 第九章 中位数和顺位统计学

第九章 中位数和顺序统计学

1.最大最小值:

template <class T>
pair<T,T> MinMax(T* a,int n)
{
	T _min,_max;
	if (n <= 0)
	{
		return make_pair(_min,_max);
	}
	if (n%2)
	{
		_min = _max = a[0];
	}else
	{
		if (a[0] < a[1])
		{
			_min = a[0];
			_max = a[1];
		}
		else
		{
			_min = a[1];
			_max = a[2];
		}
	}
	for (int i = n - 1; i > 1; i -=2)
	{
		if (a[i] > a[i - 1])
		{
			if (a[i] > _max)
			{
				_max = a[i];
			}
			if (a[i - 1] < _min)
			{
				_min = a[i - 1];
			}
		}
		else
		{
			if (a[i - 1] > _max)
			{
				_max = a[i - 1];
			}
			if (a[i] < _min)
			{
				_min = a[i];
			}
		}
	}
	return make_pair(_min,_max);
}


2.顺位统计学

template <class T>
T _RandomSelect(T* a,int p,int r,int i)
{
	if (p == r)
	{
		return a[p];
	}
	int q = RandomizePartition(a,p,r);
	int k = q - p + 1;
	if (k == i)
	{
		return a[q];
	}
	else if (i < k)
	{
		return _RandomSelect(a,p,q - 1,i);
	}
	else
	{
		return _RandomSelect(a,q + 1,r,i - k);
	}
}
template <class T>
T RandomSelect(T* a,int n,int i)
{
	return _RandomSelect(a,0,n - 1,i);
}


3.改良的顺位统计学:通过对数组中进行分离时的主元素的选择,可以拥有较好的时间复杂性,不过常数因子会很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值