求一个数组中最大值与最小值

#include <stdio.h>

int main()
{
    int array[10]={100,1,40,29,45,22,98,2,83,75};

    int max=array[0];//将第一个元素赋值给max
    int min=array[0];//将第一个元素赋值给min
    int i;
    for(i=1;i<10;i++)//通过循环访问剩下的9个数组元素
    {
        if(max<array[i])//将max与剩下的元素比较大小,将比max大的元素赋值给max
            max=array[i];

        if(min>array[i])//将min与剩下的元素比较大小,将比min小的元素赋值给min
            min=array[i];

    }

    printf("max=%d\n",max);
    printf("min=%d\n",min);

    return 0;
}

打印结果:

 

转载于:https://www.cnblogs.com/onemusk/p/9511681.html

<think>好的,我现在需要帮助用户解决在C++中找到数组最大值最小值的问题。首先,我得回忆一下C++中处理数组的常用方法。用户可能对基础的方法比较感兴趣,比如手动遍历数组,或者使用标准库中的算法。 首先,手动遍历数组的方法。通常,我们可以初始化两个变量,比如max和min,分别赋值为数组的第一个元素。然后从第二个元素开始遍历,逐个比较,更新max和min的值。这种方法对于小数组来说简单有效,用户可能更容易理解。需要注意的是处理数组为空的情况,这时候可能需要返回错误或者抛出异常,但用户的问题里可能不需要这么复杂,先假设数组不为空。 然后,标准库中的方法。C++的<algorithm>头文件里有std::max_element和std::min_element函数,这两个函数可以返回指向最大最小元素的迭代器。使用这两个函数可以简化代码,特别是对于较大的数组或者需要代码简洁的情况。不过用户需要注意这两个函数返回的是迭代器,要解引用才能得到值,同时如果数组是空的,解引用会出错,所以得确保数组非空。 接下来,我需要检查用户提供的引用内容。引用[1]提到了一个C++程序来查找数组中的最小最大元素,可能里面包含了手动遍历的方法。而引用[2]看起来是一个定时器更新标签的例子,可能和当前问题关系不大,但需要确认是否有相关代码可以利用。不过根据内容,引用[2]似乎不涉及数组操作,所以可能主要参考引用[1]的方法。 用户可能需要代码示例,所以需要准备两种方法的代码。手动遍历的方法示例,初始化max和min为第一个元素,然后循环比较。标准库方法示例,使用max_element和min_element,并处理迭代器。同时要提醒用户注意数组非空,否则会导致未定义行为。 另外,用户可能关心时间复杂度和效率。两种方法都是O(n)时间复杂度,但标准库函数可能有优化,或者手动遍历可以减少比较次数,比如同时寻找最大最小值,这样比较次数是3n/2次,而不是2n次。不过通常实现中可能还是简单的逐个比较,所以需要说明清楚。 最后,生成相关问题,帮助用户深入理解,比如如何自定义比较函数,处理空数组的方法,或者性能比较的问题。这些扩展问题可以帮助用户更全面地掌握相关知识。</think>### 在C++中数组最大值最小值的方法 #### 1. **手动遍历法** 通过遍历数组元素,逐个比较更新最大值最小值: ```cpp #include <iostream> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 7}; int n = sizeof(arr) / sizeof(arr[0]); if (n == 0) { cout << "数组为空"; return 0; } int max_val = arr[0]; int min_val = arr[0]; for (int i = 1; i < n; ++i) { if (arr[i] > max_val) max_val = arr[i]; if (arr[i] < min_val) min_val = arr[i]; } cout << "最大值: " << max_val << endl; cout << "最小值: " << min_val << endl; return 0; } ``` **说明**: - 时间复杂度为$O(n)$,空间复杂度为$O(1)$ - 需先检查数组是否为空[^1] #### 2. **使用标准库算法** 通过`<algorithm>`中的`std::max_element`和`std::min_element`实现: ```cpp #include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 7}; int n = sizeof(arr) / sizeof(arr[0]); if (n == 0) { cout << "数组为空"; return 0; } auto max_ptr = max_element(arr, arr + n); auto min_ptr = min_element(arr, arr + n); cout << "最大值: " << *max_ptr << endl; cout << "最小值: " << *min_ptr << endl; return 0; } ``` **说明**: - 函数返回迭代器,需用`*`解引用获取值 - 同样需要检查空数组 #### 3. **优化技巧** - 若需同时获取最大最小值,可通过单次遍历减少比较次数(比较次数从$2n$降到$3n/2$) - 对自定义数据类型,可重载比较运算符或传递自定义比较函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值