使用循环经典算法,使用分治思想 完成数组当中求最大值最小值用c语言代码怎么写
时间: 2024-09-15 14:02:20 浏览: 60
在C语言中,使用循环经典算法(如遍历数组)结合分治思想来寻找数组中的最大值和最小值,通常涉及到两层循环:一层用于遍历数组,另一层用于比较当前元素和已知的最大值和最小值。这里提供一个简单的示例:
```c
#include <stdio.h>
// 分别初始化数组的最大值和最小值为数组的第一个元素
int findMax(int arr[], int n) {
if (n == 1)
return arr[0];
else
return (arr[0] > arr[1]) ? arr[0] : arr[1]; // 比较第一个和第二个元素
}
// 更新最大值,递归处理剩余部分
int maxRec(int arr[], int low, int high) {
if (low == high) { // 当只有一个元素时返回该元素
return arr[low];
} else {
int mid = (low + high) / 2;
int leftMax = maxRec(arr, low, mid); // 递归求左半部分的最大值
int rightMax = maxRec(arr, mid + 1, high); // 递归求右半部分的最大值
return (leftMax > rightMax) ? leftMax : rightMax; // 返回左右两部分的最大值
}
}
int findMin(int arr[], int n) {
// 类似于findMax,将第一个元素作为初始最小值
if (n == 1)
return arr[0];
else
return (arr[0] < arr[1]) ? arr[0] : arr[1]; // 比较第一个和第二个元素
// 更新最小值,递归处理剩余部分
int minRec(int arr[], int low, int high) {
// ...此处与maxRec函数类似,只是判断条件相反...
}
return minRec(arr, 0, n - 1);
}
int main() {
int arr[] = {5, 3, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int maxVal = maxRec(arr, 0, n - 1);
int minVal = findMin(arr, n);
printf("Array maximum value: %d\n", maxVal);
printf("Array minimum value: %d\n", minVal);
return 0;
}
```
阅读全文