//分治法求最大最小元
#include"iostream"
#include"vector"
using namespace std;
void MaxMin(int i,int j,int& max1,int& min1,vector<int> l);
int main(){
vector<int> v;
int n,temp;
cout<<"input number of digits:";
cin>>n;
cout<<"input "<<n<<" digits:"<<endl;
for(int i=0;i<n;i++){
cin>>temp;
v.push_back(temp);
}
int i=0;
int j=v.size()-1;
int max1=0;
int min1=0;
MaxMin(i,j,max1,min1,v);
cout<<"max="<<max1<<" min="<<min1;
return 0;
}
void MaxMin(int i,int j,int& max1,int& min1,vector<int> l){
int max2,min2;
if(i==j)max1=min1=l[i];
else if (i==j-1)
if(l[i]<l[j]){
max1=l[j];
min1=l[i];
}
else{
max1=l[i];
min1=l[j];
}
else{
int m=(i+j)/2;
MaxMin(i,m,max1,min1,l);
MaxMin(m+1,j,max2,min2,l);
if(max1<max2) max1=max2;
if(min1>min2) min1=min2;
}
}
分析程序可以看出利用vector容器使得灵活性大大提高,可以对任意数量的元素求最大最小元。相同的思路医用C++提供的new、delete方式创建动态数组也可以实现相同的功能,在此就不再赘述了。