利用分治法求一组数据中最大的两个数和最小的两个数。用C语言解决
时间: 2023-10-29 11:08:53 浏览: 39
以下是使用分治法求最大最小两个数的C语言实现:
```c
#include <stdio.h>
#include <limits.h>
void findMinMax(int arr[], int low, int high, int *min, int *max)
{
int mid, leftMin, leftMax, rightMin, rightMax;
// 如果只有一个元素
if (low == high) {
*min = *max = arr[low];
return;
}
// 如果有两个元素
if (high == low + 1) {
if (arr[low] > arr[high]) {
*max = arr[low];
*min = arr[high];
} else {
*max = arr[high];
*min = arr[low];
}
return;
}
// 如果有多个元素
mid = (low + high) / 2;
findMinMax(arr, low, mid, &leftMin, &leftMax);
findMinMax(arr, mid + 1, high, &rightMin, &rightMax);
// 比较左右子数组的最大值和最小值
if (leftMax > rightMax) {
*max = leftMax;
} else {
*max = rightMax;
}
if (leftMin < rightMin) {
*min = leftMin;
} else {
*min = rightMin;
}
}
int main()
{
int arr[] = { 3, 2, 5, 1, 7, 9, 4, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
int min = INT_MAX, max = INT_MIN;
findMinMax(arr, 0, n - 1, &min, &max);
printf("最小的两个数是 %d 和 %d\n", min);
printf("最大的两个数是 %d 和 %d\n", max);
return 0;
}
```
该代码将一个数组分成两个子数组,然后递归地找到每个子数组的最大和最小元素。最后,比较两个子数组的最大和最小值,以找到整个数组的最大和最小值。