您的位置:首页 > 其它

用递归法求解一个数组中的最大值和最小值的问题

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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐