查找数组中第二大的数字


#define ARRSIZE             10
#define MINNUMBER          0xFFFFFFFF
#define FIND_SUCESS         1
#define FIND_FAIL          0
int GetSecondMaxNumber(int buffer[],int *secondMax)
{
    int i,max;
 
    max = buffer[0];
    *secondMax = MINNUMBER;
    for(i=1;i<ARRSIZE;i++)
    {
       if(buffer[i] > max)
       {
            *secondMax = max;
           max = buffer[i];
       }
       else if (buffer[i] > *secondMax && buffer[i] < max)
           *secondMax = buffer[i];
    }
    if(*secondMax == MINNUMBER) //The numbers are all the same.
       return FIND_FAIL;
 
    return FIND_SUCESS;
}


查找第二大数实际上是伴随在查找最大数的过程中的。

<!--[if !supportLists]-->1、<!--[endif]-->如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。

<!--[if !supportLists]-->2、 <!--[endif]-->如果当前的元素大于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。――判断条件不能仅仅只是大于第二大的数secondMax,否则我们便无法处理” 99,99,88,86,68,66 ”这种情况。

PS:这个函数在调用时需要判断函数的返回值是否是 FIND_SUCESS 才能使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值