【C++练习】22.C++中,查找数组中的最大值和最小值
·
目录
-
- 方法一:使用循环遍历数组
- 方法二:使用标准库函数 `std::min_element` 和 `std::max_element`
- 方法三:使用 STL 容器和算法
- 方法四:使用递归
- 方法五:使用分治法
- 方法六:使用 Lambda 表达式和 `std::for_each`
在C++中,查找数组中的最大值和最小值有多种方法。以下是几种常见的方法及其实现思路、代码示例和说明:
方法一:使用循环遍历数组
思路:通过循环遍历数组,逐个比较数组中的每个元素,更新最大值和最小值。
代码示例:
#include <iostream>
using namespace std;
void findMaxMin(int arr[], int size, int& max, int& min) {
max = arr[0];
min = arr[0];
for (int i = 1; i < size; ++i) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int size = sizeof(arr) / sizeof(arr[0]);
int max, min;
findMaxMin(arr, size, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
- 初始化
max和min为数组的第一个元素。 - 遍历数组,逐个比较每个元素,更新
max和min。
方法二:使用标准库函数 std::min_element 和 std::max_element
思路:使用 <algorithm> 头文件中的 std::min_element 和 std::max_element 函数来查找数组中的最小值和最大值。
代码示例:
#include <iostream>
#include <algorithm>
using namespace std;
void findMaxMin(int arr[], int size, int& max, int& min) {
max = *max_element(arr, arr + size);
min = *min_element(arr, arr + size);
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int size = sizeof(arr) / sizeof(arr[0]);
int max, min;
findMaxMin(arr, size, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
std::max_element和std::min_element返回指向最大值和最小值的指针。- 使用解引用操作符
*获取最大值和最小值。
方法三:使用 STL 容器和算法
思路:使用 STL 容器(如 std::vector)和算法(如 std::min_element 和 std::max_element)来查找最大值和最小值。
代码示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void findMaxMin(const vector<int>& vec, int& max, int& min) {
max = *max_element(vec.begin(), vec.end());
min = *min_element(vec.begin(), vec.end());
}
int main() {
vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int max, min;
findMaxMin(vec, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
- 使用
std::vector容器存储数组元素,更灵活。 - 使用
std::max_element和std::min_element查找最大值和最小值。
方法四:使用递归
思路:通过递归函数逐个比较数组中的元素,更新最大值和最小值。
代码示例:
#include <iostream>
using namespace std;
void findMaxMinRec(int arr[], int size, int& max, int& min, int index = 0) {
if (index == size) {
return;
}
if (arr[index] > max) {
max = arr[index];
}
if (arr[index] < min) {
min = arr[index];
}
findMaxMinRec(arr, size, max, min, index + 1);
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int size = sizeof(arr) / sizeof(arr[0]);
int max = arr[0], min = arr[0];
findMaxMinRec(arr, size, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
- 递归函数
findMaxMinRec逐个比较数组中的元素,更新max和min。 - 递归终止条件是
index == size。
方法五:使用分治法
思路:将数组分成两部分,分别查找每部分的最大值和最小值,然后比较两部分的结果,得到整个数组的最大值和最小值。
代码示例:
#include <iostream>
using namespace std;
void findMaxMinDivide(int arr[], int low, int high, int& max, int& min) {
if (low == high) {
max = arr[low];
min = 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;
}
int mid = (low + high) / 2;
int max1, min1, max2, min2;
findMaxMinDivide(arr, low, mid, max1, min1);
findMaxMinDivide(arr, mid + 1, high, max2, min2);
max = max1 > max2 ? max1 : max2;
min = min1 < min2 ? min1 : min2;
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int size = sizeof(arr) / sizeof(arr[0]);
int max, min;
findMaxMinDivide(arr, 0, size - 1, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
- 递归地将数组分成两部分,分别查找每部分的最大值和最小值。
- 比较两部分的结果,得到整个数组的最大值和最小值。
方法六:使用 Lambda 表达式和 std::for_each
思路:使用 C++11 的 Lambda 表达式结合 std::for_each 来查找最大值和最小值。
代码示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void findMaxMin(const vector<int>& vec, int& max, int& min) {
max = vec[0];
min = vec[0];
for_each(vec.begin(), vec.end(), [&](int value) {
if (value > max) max = value;
if (value < min) min = value;
});
}
int main() {
vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
int max, min;
findMaxMin(vec, max, min);
cout << "Maximum: " << max << endl;
cout << "Minimum: " << min << endl;
return 0;
}
说明:
- 使用 Lambda 表达式简化了遍历和比较操作。
- 结合
std::for_each遍历容器元素。
这些方法各有优缺点,可以根据具体需求和场景选择合适的方法。
更多推荐

所有评论(0)