码迷,mamicode.com
首页 > 其他好文 > 详细

分治法求最大值

时间:2015-04-22 00:18:22      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

将数组a[i:j]一分为二,找出前半部分最大值,找出后半部分最大值,总合结果

#include<iostream>
using namespace std;
void findMax(int a[], int i, int j, int &max);
int main(){
int a[100];
int n, i;
while (cin >> n){
for (i = 0; i < n; i++)
cin >> a[i];
int max = a[0];
findMax(a, 0, n - 1,max);
cout << max << endl;
}
}
void findMax(int a[], int i, int j, int &max){
if (j == i){
/*一个元素时候,a[i]为这小组的最大者*/
max = a[i];
}
else if (j == i + 1){
/*找出两个数的最大者*/
max = a[i]>a[j] ? a[i] : a[j];
}
else{
int k = (j - i + 1) / 2;
int max1;
/*分治后递归*/
findMax(a, i, i + k, max);/*a[i:i+k]中最大值*/
findMax(a, i + k + 1, j, max1)/*a[i+k+1:j]中的最大者*/;
max = max1 > max ? max1 : max;/*max保存最大值*/
}
}

分治法求最大值

标签:

原文地址:http://www.cnblogs.com/td15980891505/p/4445816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!