查找數組中第二大的數值
題目:寫一個函數找出一個整數數組中,第二大的數。【Mirosoft】解答:
int FindSecondMaxValue(int src[], int count)

{
int max = 0;
int secondMax = 0;
if (count==0) return secondMax;
if (count==1)
{
return src[0];
}
else if (src[0] > src[1])
{
max = src[0];
secondMax = src[1];
}
else
{
max = src[1];
secondMax = src[0];
}
for (int i=2; i<count; ++i)
{
if (src[i] >= max)
{
secondMax = max;
max = src[i];
}
else
{
if (src[i]>secondMax)
{
secondMax = src[i];
}
}
}
return secondMax;
}1.數組的元素數量為1,0個;
2.數組所有元素的數值相等;
3.數組元素只有2個不同的數值。
以上代碼還不是很健壯,不過基本邏輯應該是OK的,以下是測試代碼,測試了相關的邊界條件。
void testFindSecondMaxValue()

{
const int array_size = 10;
// 一般情況
int arr1[array_size]=
{0, -1, 1, 87, 3354, 24, -56, 355, 687, -100};
std::cout << "數組中第二大數為:" << FindSecondMaxValue(arr1, array_size ) << std::endl;
// 數組元素只有2個不同的數值
int arr2[array_size]=
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0};
std::cout << "數組中第二大數為:" << FindSecondMaxValue(arr2, array_size ) << std::endl;
// 數組所有元素的數值相等
int arr3[array_size]=
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
std::cout << "數組中第二大數為:" << FindSecondMaxValue(arr3, array_size ) << std::endl;
// 只有0個元素的數組
//int arr4[0];
//std::cout << "數組中第二大數為:" << FindSecondMaxValue(arr4, 0 ) << std::endl;
// 只有1個元素的數組
int arr5[1]=
{1};
std::cout << "數組中第二大數為:" << FindSecondMaxValue(arr5, 1 ) << std::endl;
}附送一個求數組第二小的元素的查找算法:
int FindSecondMinValue(int src[], int count)

{
int min = 0;
int secondMin = 0;
if (count==0) return secondMin;
if (count==1)
{
return src[0];
}
else if (src[0] < src[1])
{
min = src[0];
secondMin = src[1];
}
else
{
min = src[1];
secondMin = src[0];
}
for (int i=2; i<count; ++i)
{
if ( src[i]<=min )
{
secondMin = min;
min = src[i];
}
else
{
if ( src[i] < secondMin)
secondMin = src[i];
}
}
return secondMin;
}=。=

