应用分治的思想,编写一个C语言程序,找出一组无序数据的最大值与最小值。
时间: 2024-11-05 13:33:31 浏览: 23
应用分治算法解决最大值和最小值问题,可以将数组分成两半,分别找出左半部分和右半部分的最大值和最小值,然后比较这两个子问题的结果得出整个数组的最大值和最小值。以下是使用C语言实现的一个简单示例:
```c
#include <stdio.h>
// 分治法函数:寻找数组中的最大值
int findMax(int arr[], int low, int high) {
if (low == high) { // 如果只有一个元素,那就是最大值
return arr[low];
} else if (high == low + 1) { // 如果只有两个元素,直接比较
return arr[high] > arr[low] ? arr[high] : arr[low];
} else {
int mid = low + (high - low) / 2; // 找到中间索引
int maxLeft = findMax(arr, low, mid); // 分治查找左半部分的最大值
int maxRight = findMax(arr, mid+1, high); // 分治查找右半部分的最大值
return max(maxLeft, maxRight); // 返回左右两边最大值较大的那个
}
}
// 同样处理最小值
int findMin(int arr[], int low, int high) {
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 - low) / 2;
int minLeft = findMin(arr, low, mid);
int minRight = findMin(arr, mid+1, high);
return min(minLeft, minRight);
}
}
int main() {
int arr[] = {4, 2, 9, 6, 1, 5}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
printf("最大值: %d\n", findMax(arr, 0, n - 1));
printf("最小值: %d\n", findMin(arr, 0, n - 1));
return 0;
}
```
阅读全文