c++怎么找出数组的最值
时间: 2024-11-27 19:12:30 浏览: 20
在C++中,找出数组的最小值和最大值有几种常见的方法:
1. **遍历法**:通过两变量分别记录当前已知的最大值和最小值,然后逐个遍历数组元素,如果遇到比当前最大值大的数就更新最大值,如果遇到比当前最小值小的数就更新最小值。
```cpp
int arr[] = {5, 9, 1, 7, 3};
int min_val = arr[0];
int max_val = arr[0];
for (int i = 1; i < sizeof(arr) / sizeof(arr[0]); i++) {
if (arr[i] < min_val) {
min_val = arr[i];
}
if (arr[i] > max_val) {
max_val = arr[i];
}
}
std::cout << "Minimum value is: " << min_val << std::endl;
std::cout << "Maximum value is: " << max_val << std::endl;
```
2. **分治法**:可以使用分治策略,将数组分为左右两部分,分别找出左半部分的最大值和右半部分的最小值,然后比较这两个局部最大值和最小值,得到全局范围内的最值。这种方法适用于大数据集,但对于小型数据集性能稍差。
3. **递归**:对于非常大的数组或者动态数组,还可以考虑使用递归来找到最值。但通常这种做法不如迭代简单直观。
相关问题
用C++写出数组中求最值
在C++中,可以使用循环或者迭代器来查找数组中的最大值和最小值。这里给出两种简单的示例:
**1. 使用循环:**
```cpp
#include <iostream>
int findMaxMin(int arr[], int size) {
if (size == 0) {
std::cout << "Array is empty.\n";
return -1; // 或者返回NULL或其他表示错误的值
}
int maxVal = arr[0];
int minVal = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
} else if (arr[i] < minVal) {
minVal = arr[i];
}
}
return maxVal, minVal;
}
int main() {
int arr[] = {5, 10, 15, 20, 25};
int n = sizeof(arr) / sizeof(arr[0]);
int max, min;
max, min = findMaxMin(arr, n);
std::cout << "Max value: " << max << ", Min value: " << min << "\n";
return 0;
}
```
**2. 使用STL算法:**
C++标准库`<algorithm>`提供了一个名为`std::minmax_element()`的函数,可以直接找到数组中的最大值和最小值。
```cpp
#include <iostream>
#include <algorithm>
int main() {
int arr[] = {5, 10, 15, 20, 25};
int n = sizeof(arr) / sizeof(arr[0]);
auto max_min = *std::minmax_element(arr, arr + n);
std::cout << "Max value: " << max_min.first << ", Min value: " << max_min.second << "\n";
return 0;
}
```
在这两个例子中,数组的最值会在程序运行时被计算出来。
C++用库获取指针数组得最值
在C语言中,可以使用库函数和指针来获取指针数组的最值。可以使用`max_element()`和`min_element()`函数来获取最大值和最小值。
首先,需要包含头文件`#include<algorithm>`
1. 如果是使用指针数组,可以使用以下代码获取最大值和最小值:
```
int *p_max = max_element(a, a + 10); //获取最大值指针
int *p_min = min_element(a, a + 10); //获取最小值指针
```
2. 如果是使用vector容器存储指针数组,可以使用以下代码获取最大值和最小值:
```
vector<int*> vec; //定义一个存储指针的vector容器
//将指针数组元素添加到vector容器中
for (int i = 0; i < 10; i++) {
vec.push_back(&a[i]);
}
//获取最大值和最小值指针
int *p_max = *max_element(vec.begin(), vec.end());
int *p_min = *min_element(vec.begin(), vec.end());
```
注意,返回的是第一个最大或最小元素的指针地址。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [c++通过指针来实现数组的关系最大值,最小值,平均值](https://blog.csdn.net/qq_39352109/article/details/88547494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [C++数组或vector求最值](https://blog.csdn.net/weixin_43699840/article/details/105187463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文