您的位置:首页 > 编程语言

编程之美2.10寻找数组中的最大值和最小值代码

2014-03-19 18:40 405 查看
P161 分治法求解,复杂度为f(N) = 1.5N-1;

代码如下:比较简单

#include <iostream>

using namespace std;

void FindMaxAndMin(int num[],int l,int r,int &minNum,int &maxNum);

int main()
{
int n = 6;
int num[] = {6,5,8,3,9,7};
int minNum,maxNum;

FindMaxAndMin(num,0,n-1,minNum,maxNum);
for(int i=0 ; i<n ; i++){
cout << num[i] << " ";
}
cout << endl;

cout << minNum << " " <<maxNum<< endl;
return 0;
}
void FindMaxAndMin(int num[],int l,int r,int &minNum,int &maxNum)
{
int minl,maxl,minr,maxr;

if(r - l == 0){
minNum = num[r];
maxNum = num[r];
return ;
}
if(r - l == 1){
if(num[r] > num[l]){
maxNum = num[r];
minNum = num[l];
}
else{
maxNum = num[l];
minNum = num[r];
}
return ;
}
FindMaxAndMin(num,l,(l+r)/2,minl,maxl);
FindMaxAndMin(num,1+(l+r)/2,r,minr,maxr);
//merge
if(minl < minr){
minNum = minl;
}
else{
minNum = minr;
}
if(maxl > maxr){
maxNum = maxl;
}
else{
maxNum = maxr;
}

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