分治法求解最大最小元c语言
时间: 2024-10-07 07:02:26 浏览: 44
“分治法”-贪心算法c语言版
分治法是一种解决问题的经典策略,尤其适用于递归算法设计。在C语言中,它可以用来寻找数组中的最大值(Max)和最小值(Min)。下面是一个简单的分治方法求解最大最小元素的例子:
1. **分治过程**:
- **基本情况**:如果数组只有一个元素,那么这个元素即为最大和最小元素。
- **递归步骤**:对于长度大于1的数组,通常将数组分为两半,分别找出左半部分的最大值(max_left)、右半部分的最大值(max_right),以及左半部分的最小值(min_left)和右半部分的最小值(min_right)。
- **合并结果**:最后比较整个数组的最大值就是`max(max_left, max_right)`,最小值则是`min(min_left, min_right)`。
2. **C语言代码示例**:
```c
#include <stdio.h>
void findMinMax(int arr[], int low, int high, int* max_val, int* min_val) {
if (low == high) { // 基本情况:只有一个元素
*max_val = arr[low];
*min_val = arr[low];
} else {
int mid = (low + high) / 2;
int max1, min1, max2, min2;
findMinMax(arr, low, mid, &max1, &min1);
findMinMax(arr, mid + 1, high, &max2, &min2);
*max_val = (arr[mid] > arr[high]) ? arr[mid] : arr[high]; // 取较大值
*min_val = (arr[mid] < arr[high]) ? arr[mid] : arr[high]; // 取较小值
*max_val = (*max_val > max1) ? *max_val : max1; // 更新全局最大值
*min_val = (*min_val < min1) ? *min_val : min1; // 更新全局最小值
}
}
int main() {
int arr[] = {5, 3, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int max, min;
findMinMax(arr, 0, n - 1, &max, &min);
printf("Max value: %d\n", max);
printf("Min value: %d\n", min);
return 0;
}
```
阅读全文