分治法求最大最小值(C语言)
时间: 2024-10-29 17:24:40 浏览: 69
分治法是一种常用算法策略,它将复杂的问题分解成较小的、相似的子问题,并递归地解决这些子问题,最终合并结果得到原问题的答案。在求解数组的最大最小值这个问题上,可以使用分治法的简化版,称为“划分与比较”:
**C语言实现(寻找整个数组中的最大值)**:
```c
#include <stdio.h>
// 寻找数组中最大值的函数
int findMax(int arr[], int low, int high) {
// Base case: 如果只有一个元素,那就是最大值
if (low == high)
return arr[low];
// 如果有两个元素,直接比较并返回较大者
else if (high - low == 1)
return (arr[low] > arr[high]) ? arr[low] : arr[high];
// 否则,取中间元素,分别对左半部分和右半部分递归查找最大值,然后对比
else {
int mid = (low + high) / 2;
return (arr[mid] > findMax(arr, low, mid)) ? arr[mid] : findMax(arr, mid+1, high);
}
}
int main() {
int arr[] = {5, 3, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
printf("The maximum value is: %d\n", findMax(arr, 0, n-1));
return 0;
}
```
同样的思路也可以用于找到最小值。
**相关问题--:**
1. 分治法是如何应用在这个问题上的?
2. 这种方法的时间复杂度是多少?
3. 如果数组非常大,这种方法是否还是最优的?为什么?
阅读全文