用分治策略求解数组A的最大值与最小值
#include “pch.h”
#include <stdio.h>
#define MAX(a,b) (a > b ? a : b)
#define MIN(a,b) (a < b ? a : b)
void get_min_max(int a[], int &max, int &min, int left, int right)
{
if (a == NULL || left > right) {
return;
}
if (left == right) {
max = MAX(max, a[left]);
min = MIN(min, a[left]);
return;
}
//max和较大元素比较,min和较小元素比较
else if (right - left == 1) {
if (a[right] > a[left]) {
max = MAX(max, a[right]);
min = MIN(min, a[left]);
return;
}
else {
max = MAX(max, a[left]);
min = MIN(min, a[right]);
return;
}
}
get_min_max(a, max, min, left, (left + right) / 2);
get_min_max(a, max, min, (left + right) / 2 + 1, right);
}
int main()
{
int max,min,i=0,temp;
int a[1000];
FILE *fpRead = fopen(“data.txt”, “r”);
if (fpRead == NULL)
{
return 0;
}
while (!feof(fpRead))
{
fscanf(fpRead, "%d ", &temp);
a[i] = temp;
i++;
}
get_min_max(a, max, min, 0, i-1);
printf(“max = %d min = %d\n”, max, min);
getchar();
return 0;
}