二分法求最大最小值

代码如下

#include<iostream>
#include<vector>
#include<ctime>//随机函数生成随机数
using namespace std;
void max_min(vector<int>v,int left,int right,int max_n,int min_n)
{
	if(left == right) //递归终止 只有一个元素
	{
		max_n = min_n =v[left];
		return ;
	}
	if(left+1 == right)//递归终止 只有两个元素
		{
			max_n=v[left]>v[right]?v[left]:v[right];
			min_n=v[left]<v[right]?v[left]:v[right];
			return ;
		}
	int max1_n,int min1_n,int max2_n,int min2_n;
	int mid = (left + right)/2;
	max_min(v,left,mid,max1_n,min1_n);
	max_min(v,mid + 1,right,max2_n,min2_n);
        //合并问题的解
	max_n = max1_n > max2_n?max1_n:max2_n;
	min_n = min1_n < min2_n?min1_n:min2_n;
	return ;	
}

int main()
{
	srand(unsigned(time(0)));//随机函数生成随机数
	vector<int>v;
	for(int i = 0;i < 100;i++)
	{	
	    v.push_back(rand()/1000000);
	    count<<v[i]<<" ";
	}
	cout<<endl;
	int max_n,min_n;
	max_min(v,0,99,max_n,min_n);
	cout<<"最大值"<<max_n<<endl<<"最小值"<<min_n<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值