題目:寫一個函數(shù)找出一個整數(shù)數(shù)組中,第二大的數(shù)。【
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.數(shù)組的元素數(shù)量為1,0個;
2.數(shù)組所有元素的數(shù)值相等;
3.數(shù)組元素只有2個不同的數(shù)值。
以上代碼還不是很健壯,不過基本邏輯應該是OK的,以下是測試代碼,測試了相關(guān)的邊界條件。
void testFindSecondMaxValue()


{
const int array_size = 10;

// 一般情況

int arr1[array_size]=
{0, -1, 1, 87, 3354, 24, -56, 355, 687, -100};
std::cout << "數(shù)組中第二大數(shù)為:" << FindSecondMaxValue(arr1, array_size ) << std::endl;

// 數(shù)組元素只有2個不同的數(shù)值

int arr2[array_size]=
{0, 1, 0, 0, 0, 0, 0, 0, 0, 0};
std::cout << "數(shù)組中第二大數(shù)為:" << FindSecondMaxValue(arr2, array_size ) << std::endl;

// 數(shù)組所有元素的數(shù)值相等

int arr3[array_size]=
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
std::cout << "數(shù)組中第二大數(shù)為:" << FindSecondMaxValue(arr3, array_size ) << std::endl;

// 只有0個元素的數(shù)組
//int arr4[0];
//std::cout << "數(shù)組中第二大數(shù)為:" << FindSecondMaxValue(arr4, 0 ) << std::endl;

// 只有1個元素的數(shù)組

int arr5[1]=
{1};
std::cout << "數(shù)組中第二大數(shù)為:" << FindSecondMaxValue(arr5, 1 ) << std::endl;

}
不過0數(shù)組在VS2005里面已經(jīng)被禁止掉了,所以arr4編譯是會要報錯的。
附送一個求數(shù)組第二小的元素的查找算法:
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;
}
其實就是反了一下,也沒啥特別的。。。。
=。=