2.1 给定一个含n个整数顺序存储的线性表,按分治法思路,采用二分策略,设计一个求出其最大值和最小值算法,编写相应测试程序。要求使用分治法设计出其中求最大值、最小值组合的递归算法用c++写
时间: 2024-05-02 18:22:23 浏览: 153
已知线性表按顺序存于内存,每个元素都是整数,试设计把所有值为负数的元素移到全部正数值元素前边的算法 .cpp
以下是我用C语言为您编写的程序:
```
#include <stdio.h>
struct Result {
int max;
int min;
};
struct Result findMinMax(int arr[], int left, int right) {
struct Result res;
if (left == right) {
res.max = arr[left];
res.min = arr[left];
return res;
}
if (right - left == 1) {
if (arr[left] < arr[right]) {
res.max = arr[right];
res.min = arr[left];
}
else {
res.max = arr[left];
res.min = arr[right];
}
return res;
}
int mid = (left + right) / 2;
struct Result leftRes = findMinMax(arr, left, mid);
struct Result rightRes = findMinMax(arr, mid + 1, right);
if (leftRes.max > rightRes.max) {
res.max = leftRes.max;
}
else {
res.max = rightRes.max;
}
if (leftRes.min < rightRes.min) {
res.min = leftRes.min;
}
else {
res.min = rightRes.min;
}
return res;
}
int main() {
int arr[] = { 23, 14, 56, 42, 38, 71, 35, 6 };
int len = sizeof(arr) / sizeof(arr[0]);
struct Result res = findMinMax(arr, 0, len - 1);
printf("最大值为:%d\n", res.max);
printf("最小值为:%d\n", res.min);
return 0;
}
```
您可以将以上代码复制到您的C语言程序中运行。
本程序使用了分治法,将线性表分成两部分求出左右两部分的最大值、最小值,然后再合并求出整个线性表的最大值、最小值。一直合并直到合并成整个线性表的最大值、最小值。
阅读全文