找出数组中第二大的数

题目:如何找出一个数组中第二大的数。
分析:如果仅仅只考虑实现,而不考虑时间效率,可以首先通过排序算法,将数组进行排序,然后根据数据下标来访问数组中第二大的数。最快的排序算法一般为快速排序算法,但是其时间复杂度仍然为O(nlogn),根据下标访问需要遍历一遍数组,时间复杂度为O(n),所以总的时间复杂度为O(nlogn)。

如何只通过一遍扫描数组即可找出数组中第二大的数?
方法:通过设置两个变量来进行判断。
(1)首先定义一个变量来存储数组的最大数,初始值为数组首元素;另一个变量用来存储数组元素的第二大数,初始值为最小负数 -32767,然后遍历数组元素。
(2)如果数组元素的值比最大数变量的值大,则将第二大变量的值更新为最大数变量的值,最大数变量的值更新为该元素的值;如果数组元素的值比最大数的值小,则判断该数组元素的值是否比第二大数的值大,如果大,则更新第二大数的值为该数组元素的值。

具体实现如下:

#include <iostream>

int FindSecMax(int arr[], int len)
{
    int sec_Max = -32767;
    int Max = arr[0];
    for (int i = 1; i < len; i++)
    {
        if (arr[i] > Max)
        {
            sec_Max = Max;
            Max = arr[i];
        }
        else
        {
            if (arr[i] > sec_Max)
                sec_Max = arr[i];
        }
    }

    return sec_Max;
}

int main(int argc, const char * argv[]) {

    int arr[] = {1,2,6,7,3,4,9,5,8};
    int len = sizeof(arr)/sizeof(int);

    printf("第二大的数为 %d\n", FindSecMax(arr, len));
    return 0;
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值