找出序列中第二大的数

找出序列中第二大的数

在一组乱序的序列中,找出第二大的数,首先会想到先进行排序,然后找打第二大的数,这不失为一个办法,但是对于只需要一组序列中第二大的数,使用排序的方法会浪费很多时间和资源的占用,所以需要另寻别的办法。

//找出第二大的数的算法
int find_sec_max(int data[], int count)
{
    int max = data[0];
    int sec_max = -32767;   //首先初始化第二大的数为此时最小的int类型数 -327667

    for (int i = 1; i < count; ++i)  //对整个序列进行遍历
    {
        if (data[i] > max)     
        {
        //如果数组中的元素比 max的元素大,则将此元素赋给max,将原本max的元素赋给 sec_max
            sec_max = max;
            max = data[i];
        }
        else
        {
        //如果该元素没有max大,则应该与sec_max比较,将更大的元素赋给sec_max
            if (data[i] > sec_max)
            {
                sec_max = data[i];
            }
        }
    }

    return sec_max;
}

测试程序:

int main()
{
    int a[] = { 2, 4, 99, 4, 5, 88, 12, 13, 14, 15 };

    cout << find_sec_max(a, sizeof(a)/sizeof(int))<<endl;

    system("pause");
    return 0;
}

运行结果: 88

猜你喜欢

转载自blog.csdn.net/Zhoujy1996/article/details/80805000