问题描述
在规模为n的数据元素集合中找出最大元。当n=2时,一次比较就可以找出两个数据元素的最大元和最小元。当n>2时,可以把n个数据元素分为大致相等的两半,一半有n/2个数据元素,而另一半有n/2个数据元素。 先分别找出各自组中的最大元,然后将两个最大元进行比较,就可得n个元素的最大元。
代码
#include <iostream>
using namespace std;
int max(int a,int b){
return (a>b) ? a:b ;
}
int zdy(int a[],int l,int r){
int max1=0, max2=0;
if(l==r)
return a[l];//返回a[r]一样
if(l==r-1)
{
return max(a[l],a[r]); //用笔,纸比划着算就会发现在递归终点只有两种情况,分别返回
//不同值即可。
}
else{
int m=(l+r)/2;
max1= zdy(a,l,m);
max2= zdy(a,m+1,r);
return max(max1,max2);
}
}
int main()
{
int a[]={2,5,8,1,0};
int t=zdy(a,0,4);
cout<<t;
return 0;
}
运行结果
测试数据在程序源码中已经给出,运行结果如下: