您的位置:首页 > 其它

在数组中限制次数的取最大值和最小值问题

2017-08-28 20:57 423 查看

设计一个算法:用不多于3n/2的平均比较次数,在数组A[1,…,n]中找出最大值和最小值的元素。

算法思想:如果在查找出最大值和最小值的元素时各遍历一遍所有元素,则至少要比较2n次,所以使用一遍遍历找出最大值和最小值的元素。
实现此思想的函数如下:
void maxmin(int A[],int n)
{
int i;
int max,min;
max = A[1];
min = A[1];
for (i=2; i<=n; ++i)
{
if (A[i] > max)
{
max = A[i];
}
else if (A[i] < min)
{
min = A[i];
}
}
cout << "max= " << max << ",min=" << min << endl;
}
在这个函数中,最坏的情况是A中的元素按递减次序排列,这时(A[i] > max)条件均不成立,比较的次数为n-1.另外,每次都要比较(A[i] < min),同样比较的次数为n-1。因此,总的比较次数为2(n-1)。最好的情况是A中的元素按递增次序排列,这时(A[i] > max)条件均成立,不会再执行else的比较,所以总的比较次数为n-1.
平均比较次数为[2(n-1)+n-1]/2 = 3n/2 - 3/2 <= 3n/2
由此可知,本算法的平均比较次数不多于3n/2.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐