最小与最大值

输入:一个包含n个数的集合A

输出:集合A的最大值最小值

        单一求解最大值与最小值可以通过打擂台的方法来实现,求解最大值或者最小值需要比较n-1次,若同时要求求出最大值与最小值比较的次数为2*n-2次.事实上我们有比这个更快的算法,比较次数为3n/2.具体做法为:记录已知的最小值与最大值,对输入·的元素成对进行处理,首先比较输入的这对元素,再将小的与当前最小值比较,将大的与当前最大值比较,于是每两个元素比较3次。

        在设置最大值与最小值初始值时候依赖于n是偶数还是奇数,必须保准初始最大最小值后剩下元素有偶数个,这样才可以成对的比较完。

#include<iostream>
using namespace std;
void Find_MAx_and_Min(int a[], int n, int &min, int &max);
int main(){
	int a[10] = { 5, -9, 8, -8, 56, 45, 21, 6, 78, 3 };
	int min = 0, max = 0;
	Find_MAx_and_Min(a, 10, min, max);
	cout << min << " " << max << endl;
	return 0;
}
void Find_MAx_and_Min(int a[], int n, int &min, int &max){
	int i = 1;
	if (n% 2) //若n是奇数
		min = max = a[0];
	else{     //否则n为偶数
		if (a[0] < a[1]){
			min = a[0];
			max = a[1];
		}
		else{
			min = a[1];
			max = a[0];
		}
		i++;
	}
	/*以上初始化min和max的值*/
	while (i<n-1){
		if (a[i] < a[i + 1]){
			min = min < a[i] ? min : a[i];
			max = max>a[i + 1] ? max : a[i + 1];
		}
		else{
			min = min < a[i + 1] ? min : a[i + 1];
			max = max>a[i] ? max : a[i];
		}
		i = i + 2;
	}
}


  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值