写一个函数找出一个整数数组中,第二大的数

刚开始接触这个题的时候,我的脑子快速飞转,但是能想到的是“冒泡排序(由大到小)”,然后取出数组的第二个值。

但是很多其他的情况还是没有考虑的,

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;
        }

 

posted @ 2013-07-17 12:48  huanshare  阅读(2309)  评论(0编辑  收藏  举报