c语言用分治法寻找最大和最小值的代码
时间: 2024-05-11 13:15:36 浏览: 100
用分治法求最大与最小值的问题
以下是使用分治法寻找数组中最大值和最小值的C语言代码:
```
#include <stdio.h>
struct Result {
int max;
int min;
};
struct Result findMinMax(int arr[], int startIndex, int endIndex) {
struct Result result;
int mid;
// 如果只有一个元素,那么最大值和最小值都是它本身
if (startIndex == endIndex) {
result.max = arr[startIndex];
result.min = arr[startIndex];
return result;
}
// 如果只有两个元素,比较它们的大小得到最大值和最小值
if (endIndex == startIndex + 1) {
if (arr[startIndex] > arr[endIndex]) {
result.max = arr[startIndex];
result.min = arr[endIndex];
} else {
result.max = arr[endIndex];
result.min = arr[startIndex];
}
return result;
}
// 如果有超过两个元素,分治思想递归处理左右两个子数组
mid = (startIndex + endIndex) / 2;
struct Result leftResult = findMinMax(arr, startIndex, mid);
struct Result rightResult = findMinMax(arr, mid + 1, endIndex);
// 取左右两个子数组的最大值和最小值
if (leftResult.max > rightResult.max) {
result.max = leftResult.max;
} else {
result.max = rightResult.max;
}
if (leftResult.min < rightResult.min) {
result.min = leftResult.min;
} else {
result.min = rightResult.min;
}
return result;
}
int main() {
int arr[] = {10, 4, 3, 7, 5, 6, 2, 1, 9, 8};
int arrSize = sizeof(arr) / sizeof(arr[0]);
struct Result result = findMinMax(arr, 0, arrSize - 1);
printf("The max element is %d\n", result.max);
printf("The min element is %d\n", result.min);
return 0;
}
```
请注意,如果您有其他的技术问题,随时可以问我,我会尽我所能帮您解答。
阅读全文