码迷,mamicode.com
首页 > 编程语言 > 详细

分治算法-----二分求最大最小

时间:2018-03-28 22:01:39      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:std   ax1   space   算法   思路   最大   定义   clu   返回   

例题1:给n个实数,求它们之中最大值和最小值,要求比较次数尽量小。

思路:用递归调用函数,在函数里做出以下判断:

1 若left==right(只有一个数) max和min都为这个数

2 若left==right-1(只有两个数) max为较大的,min为较小的

3 除以上两种以外 首先定义中间值d,在递归调用left到d与d+1到right的函数,max为两函数返回值的最大值,min为最小值

核心思路如上

原代码:

#include <iostream>
using namespace std;
int a[132133],maxx,minn;
void qq(int left1,int right1,int &maxx,int &minn)
{
int d=0,max1=0,max2=0,min1=0,min2=0;
if(left1==right1){
maxx=a[left1];
minn=a[left1];
}
if(right1==left1+1){
maxx=max(a[left1],a[right1]);
minn=min(a[left1],a[right1]);
}
else{
d=(left1+right1)/2;
qq(left1,d,max1,min1);
qq(d+1,right1,max2,min2);
maxx=max(max1,max2);
minn=min(min1,min2);
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
qq(1,n,maxx,minn);
cout<<maxx<<" "<<minn;
return 0;
}

错误原因:思路没错,但11行的if前面没有else,导致15行的else只建立在11行的if上,与思路不符,把if前面填个else即可

分治算法-----二分求最大最小

标签:std   ax1   space   算法   思路   最大   定义   clu   返回   

原文地址:https://www.cnblogs.com/jr-ag/p/8666325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!