用分治策略求解数组A的最大值与最小值

用分治策略求解数组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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43653815/article/details/89957170
今日推荐