博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.求数组元素中的最大值[分治递归]
阅读量:6231 次
发布时间:2019-06-21

本文共 988 字,大约阅读时间需要 3 分钟。

问题提出:求数组A={1,5,7,22,9}中的最大值。

这种递归非常绕,需要简化来看,比如拿只含两个元素的数组带进去观察。如A={12,25},把问题简化到最简单。

/*-------完整代码(修改简化)@映雪--------*/#include 
using namespace std;#define max(a,b) (((a) > (b)) ? (a) : (b))void Max(int a[], int l, int r, int & max){ if(l == r) /*叶子只有一个元素*/ { max = a[l] ; return ; } if(l + 1 == r) /*叶子有两个元素*/ { max=a[l]>=a[r]?a[l]:a[r]; return ; } int m = (l + r) / 2 ; /*中点*/ int lmax ; /* 左半部份最大值*/ Max(a, l, m, lmax) ; int rmax;/* 右半部份最大值*/ Max(a, m + 1, r, rmax) ; max = max(lmax, rmax) ; /*最终的最大值*/}int main(){ int max; int a[]={
1,5,7,23,78,55,789,342};/*自由修改*/ Max(a,0,sizeof(a)/sizeof(int)-1,max); cout<<"Max="<
<

另一种精简的算法,来源于《算法:C语言实现》117页

这种思路简化说明:把一个数组不停的二分对切,只到不能再切为止(切到只有一个元素时),再回溯比较。

int max(int a[],int l,int r){	int u,v,m=(l+r)/2;	if(l==r)		return a[l];	u=max(a,l,m);	v=max(a,m+1,r);	return u>v ? u : v;}

  

转载于:https://www.cnblogs.com/tinaluo/p/5267402.html

你可能感兴趣的文章
(Joomla)多功能健康模块
查看>>
基于CC2530的zigbee信道、PANID扫描设备
查看>>
前端基础之jquery
查看>>
You are beautiful
查看>>
GIS部分理论知识备忘随笔
查看>>
应用安装和卸载
查看>>
CSS深入理解学习笔记之border
查看>>
查找并替换中文字符
查看>>
GRU(Gated Recurrent Unit) 更新过程推导及简单代码实现
查看>>
inline和宏之间的区别
查看>>
Ext文本框添加清除图标,
查看>>
MySql取得日期(前一天、某一天)
查看>>
我们系统中最常见声卡驱动问题和解决
查看>>
hibernate篇章五--Hibernage工作原理
查看>>
网站在线访问人数统计并计算停留时间
查看>>
MQTT
查看>>
求二叉树的高度
查看>>
MongodDB学习笔记(二)(复制)
查看>>
js数据结构描述--栈
查看>>
17. Letter Combinations of a Phone Number C++回溯法
查看>>