应用分治的思想,编写一个C语言程序,可以输入一组无序数据,找出一组无序数据的最大值与最小值。请给我完整的代码
时间: 2024-11-05 19:33:41 浏览: 27
C语言TOP-K问题(从一堆数据中找出最大的k个数或者最小的k个数)
当然,我们可以利用分治策略,将问题分解为较小规模的问题,解决后再合并结果。这里是一个简单的C语言程序,它通过递归的方式找到数组中的最大值和最小值:
```c
#include <stdio.h>
// 分治法寻找最大值和最小值的函数
void findMinMax(int arr[], int low, int high, int* min_val, int* max_val) {
// 基线条件:如果只有一个元素,则它是当前范围内的最小值和最大值
if (low == high) {
*min_val = arr[low];
*max_val = arr[low];
return;
}
// 如果有两个元素,直接比较找出最小和最大
if (high == low + 1) {
if (arr[low] > arr[high])
(*min_val) = arr[high], (*max_val) = arr[low];
else
(*min_val) = arr[low], (*max_val) = arr[high];
return;
}
// 否则,分割数组并递归地找到左右两个部分的最小值和最大值
int mid = (low + high) / 2;
int left_min, left_max;
findMinMax(arr, low, mid, &left_min, &left_max);
int right_min, right_max;
findMinMax(arr + mid, mid + 1, high, &right_min, &right_max);
// 将找到的最小值和最大值组合起来
*min_val = left_min <= right_min ? left_min : right_min;
*max_val = left_max >= right_max ? left_max : right_max;
}
int main() {
int n;
printf("Enter the number of elements in the array: ");
scanf("%d", &n);
int arr[n];
printf("Enter %d integers: ", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int min_val, max_val;
findMinMax(arr, 0, n - 1, &min_val, &max_val);
printf("Minimum value: %d\n", min_val);
printf("Maximum value: %d\n", max_val);
return 0;
}
```
阅读全文