C语言用数组求最大值 最小值
时间: 2024-12-20 17:15:29 浏览: 87
在C语言中,寻找数组中的最大值和最小值可以采用遍历数组的方式实现。以下是两种常见的方法:
1. **遍历法(线性时间复杂度)**:
```c
#include <stdio.h>
int findMinMax(int arr[], int n, int* min, int* max) {
*min = arr[0]; // 初始化最小值为第一个元素
*max = arr[0]; // 初始化最大值为第一个元素
for (int i = 1; i < n; i++) { // 遍历数组
if (arr[i] > *max) {
*max = arr[i]; // 如果当前元素大于已知的最大值,则更新最大值
} else if (arr[i] < *min) {
*min = arr[i]; // 如果当前元素小于已知的最小值,则更新最小值
}
}
return 0;
}
// 使用示例
int main() {
int arr[] = {5, 3, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int min, max;
findMinMax(arr, n, &min, &max);
printf("Minimum value is: %d\n", min);
printf("Maximum value is: %d\n", max);
return 0;
}
```
2. **分治法(递归法,时间复杂度取决于数组大小)**:
这种方法通过将数组分为两半并分别找出左半部分和右半部分的最大值和最小值,然后比较两个部分的极值来找到整个数组的极值。这种方法适用于较大的数组,但对于小型数组效率较低。
```c
#include <stdio.h>
// 递归函数寻找左右两个子数组的最值
void findMinMaxRec(int arr[], int left, int right, int* min, int* max) {
if (left == right) { // 当只有一个元素时,直接返回
*min = arr[left];
*max = arr[left];
} else {
int mid = (left + right) / 2;
int leftMin = *min, leftMax = *max;
findMinMaxRec(arr, left, mid, &leftMin, &leftMax);
int rightMin = *min, rightMax = *max;
findMinMaxRec(arr, mid+1, right, &rightMin, &rightMax);
if (leftMax > rightMax) {
*max = leftMax;
} else {
*max = rightMax;
}
if (leftMin < rightMin) {
*min = leftMin;
} else {
*min = rightMin;
}
}
}
// 主函数
int main() {
// 略同上面
return 0;
}
```
阅读全文
相关推荐















