查詢陣列中第二大的數字
阿新 • • 發佈:2019-01-09
#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 才能使用。