问题描述
在规模为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);
r