1. 程式人生 > >查詢陣列中第二大的數字

查詢陣列中第二大的數字

#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 才能使用。