转自:http://www.cnblogs.com/tomctx/archive/2012/04/07/2435887.html(这个人的其他东西也可以参考下,分治,动态规划很好)
#include <stdio.h>
#include<stdlib.h>
int max(int a, int b)
{
return (a > b) ? a : b;
}
int min(int a, int b)
{
return (a < b) ? a : b;
}
void maxmin(int A[], int &e_max, int &e_min ,int low, int high)
{
int mid, x1, y1, x2, y2;
if (high - low <= 1) { //<=,可能为1个
if (A[high] > A[low]) {
e_max = A[high];
e_min = A[low];
}
else {
e_max = A[low];
e_min = A[high];
}
} //特征1:小到容易求解
else {
mid= (low + high) / 2; //特征2:可分解
maxmin(A, x1, y1, low, mid); //特征4:子问题独立
maxmin(A, x2, y2, mid + 1, high);
e_max = max(x1, x2); //特征3:可合并
e_min = min(y1, y2);
}
}
int main()
{
int init[11], max, min;
for(int i = 1; i <= 10; i ++){
scanf("%d", &init[i]);
}
maxmin(init, max, min, 1, 10);
printf("%d %d", max, min);
system("pause");
}
/*
(0 1 3 5 2 4 6 8 9 7),ENTER LEVEL ONE
1 5 ENTER LEVEL TWO
1 3 ENTER LEVEL THREE
1 2 ENTER LEVEL FOUR
e_max = 1;
e_min = 0;
1 2 EXIT LEVEL FOUR x1 = 1; y1 = 0;
3
e_max = e_min =3;
3 EXIT LEVEL FOUR x2 = y2 = 3;
e_max = 3; -> x1;
e_min = 0; -> y1;
1 3 EXIT LEVEL THREE x1 = 1; y1 = 3;
4 5 ENTER LEVEL THREE
x2 = 5;
y2 = 2;
e_max = 5; -> x1;
e_min = 0; -> y1;
4 5 EXIT LEVEL THREE x2 = 5; y2 = 2;
e_max = 5;
e_min = 0;
1 5 EXIT LEVEL TWO x1 = 5; y1 = 0;
6 10 ENTER LEVEL TWO
6 8 ENTER LEVEL THREE
6 7 ENTER LEVEL FOUR
e_max = 6;
e_min = 4;
6 7 EXIT LEVEL FOUR x1 = 6; y1 = 4;
8 ENTER LEVEL FOUR
e_max = e_min = 8;
8 EXIT LEVEL FOUR x2 = y2 = 8;
e_max = 8;
e_min = 4;
6 8 EXIT LEVEL THREE x1 = 8; y1 = 4;
9 10 ENTER LEVEL THREE
e_max = 9;
e_min = 7;
9 10 EXIT LEVEL THREE x2 = 9; y2 = 7;
6 10 EXIT LEVEL TWO x2 = 9; y2 = 4;
e_max = 9;
e_min = 0;
1 10 EXIT LEVEL ONE e_max = 9; e_min = 0;
*/
好代码,学习下……
int l[5]={1,2,3,4,5};
const void maxmin(int i,int j, int &max, int &min)
{
int max1,min1,max2,min2;
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,max2,min2);//左边的部分
maxmin(m+1,j,max1,min1);//右边的部分,递归式左边的完成之后才进行右边的
if(max2<max1)
max=max1;
else max=max2;
if(min2>min1)
min=min1;
else min=min2;
}
}
int main()
{
int t=l[0];
int max,min;
maxmin(0,4,max,min);
cout<<min<<endl<<max<<endl<<endl;
return 0;
}
自己的代码,有点撮……