采用分治法在一个元素集合中寻找最大元素和最小元素。
程序实现:
#include<iostream> #include<cstdlib> #include<cstdio> using namespace std; const int N=1000; int mini,maxi; int l[N]; void maxMin(int i,int j,int &max,int &min); int main() { int n; cout<<"请输入数组元素个数: "; cin>>n; cout<<"请输入"<<n<<"个元素:"; for(int i=0;i<n;i++) cin>>l[i]; maxMin(0,n,maxi,mini); cout<<"最大元素: "<<maxi<<endl; cout<<"最小元素: "<<mini<<endl; return 0; } void maxMin(int i,int j,int &max,int &min) { int min1,max1; if(i==j) max=min=l[i]; //表中只有一个元素时 else if(i==j-1) //表中有两个元素时 if(l[i]<l[j]){ max=l[j]; min=l[i]; } else { max=l[i]; min=l[j]; } else //表中多于两个元素时 { int m=(i+j)/2; //对半分割 maxMin(i,m,max,min); //求前部分子表中的最大、最小值 maxMin(m+1,j,max1,min1);//求后部分子表中的最大、最小值 if(max<max1) max=max1; //两子表最大元的大者为原表最大者 if(min>min1) min=min1; //两子表最小元的小者为原表最小者 } }
版权声明:本文为博主原创文章,未经博主允许不得转载。