分治法求最大值和最小值
Description 给定n个数,在最坏情况下用 3n/2-2 次比较找出这n个数中元素的最大值和最小值。 要求只编写函数 void maxmin(int a[],int low,int high,int *max,int *min). 系统会自动在程序的最后加上如下代码: int main() { int max,min,k,a[200]; int m; while(scanf("%d",&k)&&k) { for(m=0;m<k;m++) scanf("%d",&a[m]); maxmin(a,0,k-1,&max,&min); printf("%d %d\n",max,min); } } Input 包含多组测试数据。每组测试数据的第一个元素是整数的个数n,接下来是n个整数。0表示结束。 n<=200 Output 这n个数中的最大值和最小值。 Sample Input 5 1 8 2 4 3 3 2 4 1 0 Sample Output 8 1 4 1如果之前遍历一遍需要比较n-1次,才能得到数组中的最大值和最小值,这显然是不符合预期要求的,这里应该采用的是分治思想。分治法主要有三个步骤:1.分解:将原问题划分为规模较小的几个子问题。2.求解:子问题小到可以求解了,就去求解。3.合并:将子问题的解合并为原问题的解。对于本问题就是不断地进行二分