算法系列——用分治法求最大最小值
1、方法思想
使用分治法的思想:首先把数组分成两部分,在把这两部分中的每一部分分成两部分,一直递归分解直到每一部分小于等于2个数为止,然后比较这两个数,判断最大最小值,然后回弹比较直到递归的最外层,就可以判断最大最小值;
2、问题描述
从一个无序的数列中查找最大值和最小值
3、算法描述
(1)采用分治的思想来描叙问题;
(2)伪代码:
FindMaxAndMin(a[],begin,end,pmax,pmin)
If end-begin<=1
Then pmax=a[begin]
pmin=a[end]
else pmax=a[end]
pmin=a[begin]
else mid=(begin+end)/2
FindMaxAndMin(a[],begin,mid,pmax,pmin);
FindMaxAndMin(a[],mid+1,end,pmax,pmin);
Pmax=max{gmax,hmax}
Pmin=min{gmin,hmin}
4、程序清单
1 #include <iostream>
2 using namespace std;
3
4 void FindMaxAndMin(int a[], int begin, int end, int* pmax, int* pmin)
5 {
6 if(end-begin <=1)
7 {
8 if(a[begin] <= a[end])
9 {
10 *pmax = a[end];
11 *pmin = a[begin];
12 return;
13 }
14 else
15 {
16 *pmin = a[end];
17 *pmax = a[begin];
18 return;
19 }
20 }
21
22 int min1, min2, max1, max2;
23 int mid = (begin+end)/2;
24 FindMaxAndMin(a, begin, mid, &max1, &min1);
25 FindMaxAndMin(a, mid+1, end, &max2, &min2);
26 *pmin = min1 < min2 ? min1 : min2;
27 *pmax = max1 < max2 ? max2 : max1;
28 }
29
30 int main()
31 {
32 int a[] = {1,2,3,4,5,9,41,8,12,20,98};
33 int max, min;
34 FindMaxAndMin(a, 0, 10, &max, &min);
35 cout<<"the max num is:"<<max<<", the min num is:"<<min<<endl;
36 return 0;
37 }
5、实验结果
(可用文字描述和贴图等方式表现实验结果)
输入为:a[] = {1,2,3,4,5,9,41,8,12,20,98};
输出为:
(大二的时候写的,可能还有些问题,请见谅、、、)
多聚旅游 聚游宝 学友网
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架