在数组中限制次数的取最大值和最小值问题
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.
相关文章推荐
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]
- Java常识求阶层!的和 ,获取某个数组中的最小值,定义数组,获得成绩之和,平均成绩,最小成绩,最大成绩。等问题大全
- 数组分段和最大值最小问题
- 数组分段和最大值最小问题
- 编程之美寻找数组中的最大值和最小值以及扩展问题
- KMP算法 —— next 数组的应用 --- 前缀中最小循环节,最大重复次数
- 关于在一个无序数组中的数求最大值和最小值的最小比较次数
- 算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数
- 数组分段和最大值最小问题
- 在规定次数内找出数组中最大值和最小值
- 终于搞清楚了C#二进制的一些关键操作了,解决了微软面试题,求数组中两两之差绝对值最小的值O(N)最少内存限制的问题!
- [BUC-2.10]利用分治的思想求无序数组中的最大值和最小值以及求第二大的值(分治的思想可以使得比较的次数1.5N-2)
- 求数组的最大值 最小值问题 -Math方法
- 求一个数组中的最大值和最小值,要求将比较次数减小至3N/2
- 试着用最小的比较次数去寻找数组中的最大值和最小值。
- 动态规划经典问题03:数组中最大的数对差(或最小的数对差)
- 编程之美2.10寻找数组中的最大值和最小值扩展问题Java版
- 求数组中最大值和最小值 以及 求数组中最大值和次大值 最小比较次数
- 数组分段和最大值最小问题
- 关于求数组的最大值和最小值问题(C代码)