刚开始接触这个题的时候,我的脑子快速飞转,但是能想到的是“冒泡排序(由大到小)”,然后取出数组的第二个值。
但是很多其他的情况还是没有考虑的,
1、没有第二大值,也就是这一组数字都一样。
2、第二大值不止一个,
3、考虑到性能方面,冒泡排序性能太低,循环次数太多。
中和以上情况,写出如下算法:
/// <summary> /// 找出一个整数数组中,第二大的数 /// </summary> /// <param name="data">整数数组</param> /// <param name="count">数组长度</param> /// <returns>第二大值</returns> public int Find_Sec_Num(int []data,int count) { int max_Num=data[0]; int sec_Max = -32768; for(int i=0;i<count;i++) { if(data[i]>max_Num) { sec_Max=max_Num; max_Num=data[i]; } else if(data[i]>sec_Max) { sec_Max=data[i]; } } return sec_Max; } /// <summary> /// 返回信息 /// </summary> /// <param name="data">数组</param> /// <param name="count">长度</param> /// <returns>返回信息</returns> public string Get_Info(int []data,int count) { int secMax = Find_Sec_Num(data, count); string returnInfo=null; if (secMax == -32768) { returnInfo = "第二大值不存在或为-32768"; } else { returnInfo = "第二大值为" + secMax; } return returnInfo; }