用递归法求解一个数组中的最大值和最小值的问题
2012-10-29 23:06
453 查看
用递归法求一个给定的数组中的最大值和最小值。
分析,分治法,类似二分查找,可以先求解出左半部分的最大值和最小值,再求解出又半部分的最大值和最小值然后合并求解,就可以求解出整个数组中的最大值和最小值。
那么递归的出口条件是什么呢?当划分以后只有一个元素的情况下,这个元素既是这个子数组的最大值也是子数组中的最小值,这时候就是递归的出口。下面就让代码开口说话吧。
分析,分治法,类似二分查找,可以先求解出左半部分的最大值和最小值,再求解出又半部分的最大值和最小值然后合并求解,就可以求解出整个数组中的最大值和最小值。
那么递归的出口条件是什么呢?当划分以后只有一个元素的情况下,这个元素既是这个子数组的最大值也是子数组中的最小值,这时候就是递归的出口。下面就让代码开口说话吧。
#include "iostream" using namespace std; void MaxAndMin(int array[], int left, int right, int* max, int* min) { if (left == right) { *max = array[left]; *min = array[left]; return; } else { int leftMax; int leftMin; int rightMax; int rightMin; int middle = (left + right)/2; MaxAndMin(array, left, middle, &leftMax, &leftMin); MaxAndMin(array, middle+1, right, &rightMax, &rightMin); *max = (leftMax > rightMax ? leftMax : rightMax); *min = leftMin < rightMin ? leftMin : rightMin; return; } } void main(){ int array[10] = {-1, 9, 78, 54, -48, 2, 4, 198, 0, 9}; int max = 0; int min = 0; MaxAndMin(array, 0, 9, &max, &min); cout << "max=" << max << " min=" << min << endl; }
相关文章推荐
- C语言进阶-第6讲:递归法问题求解(递归求数组的最大值)
- 求数组的最大值 最小值问题 -Math方法
- 一个数组中同时找到最大/最小值
- 数组中的最大值以及最小值的位置变换的问题(C++)
- 分治 递归 引用 求一个数组中的最大和最小元素
- 最大子数组问题(一) 暴力求解
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- acm-1003 求一个数组中连续区间和的最大值问题
- hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)
- 练习5: 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 分治策略求解最大子数组问题
- JavaScript求解数组中除最大值、最小值外其他数字之和
- 算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数
- 定义一个由整数组成的数组,然后输入一个整数X,如果X不在此数组中,返回小于X的最大数的位置i和大于X的最小数的位置j
- 从三个排好序的整数数组中分别选一个元素,使得这三个元素的最大差最小
- 请写一个简单的求数组元素最大值和最小值的方法
- Java程序:求一个数组中的最大值丶最小值和平均值。
- 分治法求解最大子数组问题
- 求解最大子数组问题 -- 暴力求解 和 分治法求解