分治法求数组最大最小值
2016-04-08 09:09
483 查看
常规的做法是遍历一次,分别求出最大值和最小值,但我这里要说的是分治法(Divide and couquer),将数组分成左右两部分,先求出左半部份的最大值和最小值,再求出右半部份的最大值和最小值,然后综合起来求总体的最大值及最小值。这是个递归过程,对于划分后的左右两部分,同样重复这个过程,直到划分区间内只剩一个元素或者两个元素。
#include <stdio.h> #include <stdlib.h> void maxandmin(int a[],int left,int right,int *maxvalue,int *minvalue) { int mid; if(left == right) { *maxvalue=a[left]; *minvalue=a[left]; return; } if(left+1 == right) { if(a[left]<=a[right]) { *maxvalue=a[left]; *minvalue=a[right]; } else { minvalue=&a[right]; maxvalue=&a[left]; } return; } mid=(left+right)/2; int lmax,lmin; maxandmin(a,left,mid,&lmax,&lmin); int rmax,rmin; maxandmin(a,mid+1,right,&rmax,&rmin); if(lmax>rmax) *maxvalue=lmax; else *maxvalue=rmax; if(lmin>rmin) *minvalue=rmin; else *minvalue=lmin; // printf("maxvalue=%d, minvalue=%d ",*maxvalue,*minvalue); } int main() { int a[13]= {2,4,70,97,127,304,67,77,81,83,99,10,209}; int b[6]= {1,2,5,7,9,11}; int c[19]; int i; int max; int min; maxandmin(a,0,12,&max,&min); printf("max=%d, min=%d",max,min); system("PAUSE"); return 0; }
相关文章推荐
- 屏蔽掉{{}}
- Spring+quartz实现自动任务调度
- 送货
- python随机数
- 【代码笔记】浇花动画
- 解决Asp.net 部署后弹出登陆框
- 【代码笔记】iOS-浇花动画
- Mybatis条件查询
- PHP使用PDO操作数据库的乱码问题解决方法
- hadoop2.7.2基于centos完全分布式安装
- script/ shell脚本 callstack如何dump
- WordPress配置文件wp-config.php详解
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- 用Enter键替代Tab键切换栏目的数据窗
- Eclipse4.4.2手动安装Veloeclipse-2.0.8
- ms-repeat 数据渲染后触发事件
- VS2010,VS2005串口控件MSComm加入方法
- 【Android】实验5 数独游戏界面设计-报告提交时间:2016.4.15
- Zookeeper .Net客户端代码
- StringBuilder与StringBuffer的区别