找出序列中第二大的数
在一组乱序的序列中,找出第二大的数,首先会想到先进行排序,然后找打第二大的数,这不失为一个办法,但是对于只需要一组序列中第二大的数,使用排序的方法会浪费很多时间和资源的占用,所以需要另寻别的办法。
//找出第二大的数的算法
int find_sec_max(int data[], int count)
{
int max = data[0];
int sec_max = -32767; //首先初始化第二大的数为此时最小的int类型数 -327667
for (int i = 1; i < count; ++i) //对整个序列进行遍历
{
if (data[i] > max)
{
//如果数组中的元素比 max的元素大,则将此元素赋给max,将原本max的元素赋给 sec_max
sec_max = max;
max = data[i];
}
else
{
//如果该元素没有max大,则应该与sec_max比较,将更大的元素赋给sec_max
if (data[i] > sec_max)
{
sec_max = data[i];
}
}
}
return sec_max;
}
测试程序:
int main()
{
int a[] = { 2, 4, 99, 4, 5, 88, 12, 13, 14, 15 };
cout << find_sec_max(a, sizeof(a)/sizeof(int))<<endl;
system("pause");
return 0;
}
运行结果: 88