问题:设计一个算法,,采用分治法求一个整数序列中的最大和最小元素。
// 求解最大和最小元素算法
#include <stdio.h>
#define max(x,y) ((x)>(y) ? (x):(y))
#define min(x,y) ((x)<(y) ? (x):(y))
#define INF 99999 // 表示最大的整数
void solve(int a[], int low, int high, int &Max,int &Min){
if(low == high) // 区间只有一个元素
{
Max = a[low];
Min = a[low];
}
else if(low == high - 1) // 区间只有两个元素
{
Max = max(a[low],a[high]);
Min = min(a[low],a[high]);
}
else{
int mid = (low + high) / 2;
int Lmax, Lmin;
solve(a, low, mid, Lmax, Lmin); // 左区间求Lmax和Lmin
int Rmax, Rmin;
solve(a, mid + 1, high, Rmax, Rmin); // 右区间求Rmax和Rmin
Max = max(Lmax,Rmax);
Min = min(Lmin,Rmin);
}
}
int main(){
int a[] = {5,2,1,4,3,100,-1};
int n = sizeof(a)/sizeof(a[0]);
int Max,Min;
solve(a, 0, n - 1, Max, Min);
printf("Max = %d, Min = %d\n", Max, Min);
}