给定一个含n个整数顺序存储的线性表,按分治法思路,采用二分策略,设计一个求出其最大值和最小值算法,编写相应测试程序。要求使用分治法设计出其中求最大值、最小值组合的递归算法。并带有c++测试程序
时间: 2024-05-29 22:10:26 浏览: 92
已知线性表按顺序存于内存,每个元素都是整数,试设计把所有值为负数的元素移到全部正数值元素前边的算法 .cpp
#include <stdio.h>
void findMaxMin(int a[], int left, int right, int *max, int *min) {
if (left == right) { // 只有一个元素的情况
*max = a[left];
*min = a[left];
} else if (left + 1 == right) { // 只有两个元素的情况
if (a[left] > a[right]) {
*max = a[left];
*min = a[right];
} else {
*max = a[right];
*min = a[left];
}
} else { // 有多个元素的情况
int mid = (left + right) / 2;
int max1, min1, max2, min2;
findMaxMin(a, left, mid, &max1, &min1);
findMaxMin(a, mid + 1, right, &max2, &min2);
// 合并结果
if (max1 > max2) {
*max = max1;
} else {
*max = max2;
}
if (min1 < min2) {
*min = min1;
} else {
*min = min2;
}
}
}
int main() {
int a[] = {3, 5, 1, 7, 2, 4, 8, 6};
int n = sizeof(a) / sizeof(a[0]);
int max, min;
findMaxMin(a, 0, n - 1, &max, &min);
printf("最大值:%d\n", max);
printf("最小值:%d\n", min);
return 0;
}
阅读全文