博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算最大值和最小值(分治法)
阅读量:5965 次
发布时间:2019-06-19

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

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

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

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

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

/* * 求最大和最小值 * 这里包括经典的算法和分治算法的实现 */#include 
#include
#include
#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
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;    }}

转载于:https://www.cnblogs.com/tigerisland/p/7564950.html

你可能感兴趣的文章
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
切图崽的自我修养-[ES6] 编程风格规范
查看>>
服务器迁移小记
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>