分治法计算最大值和最小值,是一个经典的算法程序。

原始数据使用随机函数生成。

采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。

数据个数由宏定义给出,也可以轻松地改为输入。

/** 求最大和最小值* 这里包括经典的算法和分治算法的实现*/#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define N 7void getData(int [], int);
void outputData(int [], int);void maxmin1(int [], int);
void maxmin2(int [], int, int, int *, int *);int max, min;int main(void)
{int a[N];getData(a, N);outputData(a, N);maxmin1(a, N);printf("max=%d min=%d\n", max, min);maxmin2(a, 0, N-1, &max, &min);printf("max=%d min=%d\n", max, min);return 0;
}/* 经典计算最大值和最小值的算法程序 */
void maxmin1(int d[], int n)
{int i;max = min = d[0];for(i=1; i<n; i++) {if(d[i] > max)max = d[i];else if(d[i] < min)min = d[i];}
}/* 分治法计算最大值和最小值的算法程序,递归实现 */
void maxmin2(int d[], int left, int right, int *max, int *min)
{int max1, min1;if(left==right) {*max = d[left];*min = d[left];} else if(left == right-1) {if(d[left] > d[right]){*max = d[left];*min = d[right];} else {*max = d[right];*min = d[left];}} else {int mid = (left + right) / 2;maxmin2(d, left, mid, max, min);maxmin2(d, mid+1, right, &max1, &min1);if(*max < max1)*max = max1;if(*min > min1)*min = min1;}
}void getData(int d[], int n)
{time_t t;srand((unsigned) time(&t));  /* 设置随机数起始值 */int i;for(i=0; i < n; i++)d[i] = rand() % 1000; /* 获得0-999之间的整数值 */
}void outputData(int d[], int n)
{int i;for (i = 0; i < n; i++)printf("%d ", d[i]);printf("\n");
}

核心代码:

/* 分治法计算最大值和最小值的算法程序,递归实现 */
void maxmin2(int d[], int left, int right, int *max, int *min)
{int max1, min1;if(left==right) {*max = d[left];*min = d[left];} else if(left == right-1) {if(d[left] > d[right]){*max = d[left];*min = d[right];} else {*max = d[right];*min = d[left];}} else {int mid = (left + right) / 2;maxmin2(d, left, mid, max, min);maxmin2(d, mid+1, right, &max1, &min1);if(*max < max1)*max = max1;if(*min > min1)*min = min1;}
}

计算最大值和最小值(分治法)相关推荐

  1. 最大值最小值计算机一级,excel怎么找最大值和最小值 excel怎么计算最大值减最小值...

    很多excel用户经常在表格中统计数据,很多时候我们需要找出其中的最大值和最小值,怎么找呢?我们可以一个一个的查找,如果数据多的话,就麻烦了,当然我们可以用公式去查找,优点是更快更准确,那么怎么找呢? ...

  2. 计算最大子段(分治法)

    这个程序使用分治法计算最大子段,结果为最大子段之和,用递归程序实现. 原始数据使用随机函数生成. 采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可. 数据个 ...

  3. [python] 分治法查找数组元素的最大值和最小值

    分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...

  4. 最大值和最小值的差(信息学奥赛一本通-T1112)

    [题目描述] 输出一个整数序列中最大的数和最小的数的差. [输入] 第一行为M,表示整数个数,整数个数不会大于10000: 第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000. [输出] ...

  5. 分治法的关键特征_经典算法思想2——分治(Divide-and-Conquer)

    分治法,字面意思是"分而治之",就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这 ...

  6. 求最大字段和问题(常规法,分治法,动态规划法)

    算法设计与分析-----求最大字段和问题 问题描述:给定由n个整数组成的序列(a1,a2,a3......,an),求该序列的子段的最大值. 常规法: 从a1开始,求出以a1开头的子序列最大的和为su ...

  7. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

    代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g  提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...

  8. 查找数组元素最大值和最小值(分治法)

    1. 问题 给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同 2. 思路 2.1 首元素比较法 定义变量 max.min , 分别将第一个元素分别赋值给这两个变量,然后依次遍历 ...

  9. 分治法查找数组元素的最大值和最小值(python实现)

    实验内容 给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出 实验原理 利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个 ...

最新文章

  1. BZOJ 1996 [Hnoi2010]chorus 合唱队
  2. c++ opencv 基本操作
  3. 决策树之 C4.5 算法
  4. 查询mysql所有对象_Mysql查看数据库对象(SQL命令总结)
  5. 【weblogic】部署jfinal编写的应用
  6. Android Ap 开发 设计模式第六篇:原型模式
  7. 杰出人士的34个好习惯
  8. java.sql 拒绝连接_java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝
  9. 安徽大学836数字电路与逻辑设计考研历年真题库资料
  10. java环境64位_JAVA环境配置(WIN10之64位)
  11. froala editor导出html,angular2 富文本编辑器 -- froala editor 吐血推荐
  12. iOS MOV转MP4
  13. VC获取系统临时文件夹temp
  14. My Eighty-second Page - 打家劫舍Ⅱ - By Nicolas
  15. Windows程序设计——GDI基本画图的操作实现
  16. perl调用其他的perl_Perl可能是老派,但它继续吸引新用户
  17. 多项选择题标准化考试系统设计
  18. 网络:网络层IP协议
  19. 像素鸟 app 的设计与实现
  20. 实验室第一次考核(C语言)

热门文章

  1. C#多线程学习(四) 多线程的自动管理(线程池)
  2. linux系统中怎么设置网络,vmware中linux怎么设置网络
  3. wordpress 通过域名无法访问_关于在宝塔面板的基础上搭建Wordpress个人博客的教程...
  4. clover更新驱动 后不能开机_黑苹果笔记本电池模式下省电驱动,延长笔记本续航...
  5. 工作中常用知识点、工具总结
  6. 部署SpringBoot项目到腾讯云或其他服务器
  7. mysql中join各种形式大全及操作和图片
  8. linux文件服务有哪些,linux有哪些文件系统?_网站服务器运行维护,linux
  9. 机器学习代码实战——梯度下降(gradient descent)
  10. 嵌入式数据库与数据库服务器