递归求最值(分治递归)
生活随笔
收集整理的這篇文章主要介紹了
递归求最值(分治递归)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
輸入n,再輸入n個(gè)數(shù),輸出n個(gè)數(shù)中的最小值和最大值。
分治與遞歸!
?
代碼:
#include<iostream>using namespace std;
void minmax(int *a,int left,int right,int &min,int &max);
int main()
{
int T;
cin>>T;
do
{
int *test,n,min,max;
cin>>n;
test = new int[n];
for(int i = 0 ; i != n ; ++i)
cin>>test[i];
minmax(test,0,n-1,min,max);
cout<<"min="<<min<<endl;
cout<<"max="<<max<<endl;
}while(--T);
system("pause");
return 0;
}
void minmax(int *a,int left,int right,int &min,int &max)
{
int lmin,lmax,rmin,rmax;
if(left == right)//只有一個(gè)數(shù)
{
min = a[left];
max = a[left];
}
else
{
if(left == right - 1)//只有兩個(gè)數(shù)
{
if(a[left]<a[right])
{
min = a[left]; max = a[right];
}
else
{
min = a[right]; max = a[left];
}
}
else//多余兩個(gè)數(shù)
{
int m = (left +right)>>1;//二分中點(diǎn)
minmax(a,left,m,lmin,lmax);//遞歸求出左邊的最小值最大值
minmax(a,m+1,right,rmin,rmax);//遞歸求出右邊的最小值最大值
min = (lmin<rmin)? lmin:rmin;//比較得出最小值
max = (lmax>rmax)? lmax:rmax;//比較得出最大值
}
}
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/HpuAcmer/archive/2011/12/09/2281431.html
總結(jié)
以上是生活随笔為你收集整理的递归求最值(分治递归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么获取一个类型的所有字段的名字 和获
- 下一篇: SAP屏幕设计器专题:树控件的使用(九)