博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助 

ammana_babi

杨晓曼,乖乖老婆! 我爱你,就像狮子爱猫咪。
babi.cublog.cn
关于作者  
姓名:ammana_babi
职业:程序员
年龄:22
位置:东莞
个性介绍:澹泊明智,宁静致远。

我的分类  




【我解C语言面试题系列】012 查找整数数组中第二大的数
【我解C语言面试题系列】012 查找整数数组中第二大的数

查找整数数组中第二大的数

 

题目:写一个函数找出一个整数数组中,第二大的数。【Mirosoft

PS1” 66,66,66,66,66 ”,则没有第二大数。

2” 99,99,88,86,68,66 ”,则最大数是88

下面我先给出查找最大数字的程序:

int GetFirstMaxNumber(int buffer[])

{

    int i,max;

 

    max = buffer[0];

    for(i=1;i<ARRSIZE;i++)

    {

       if(buffer[i] > max)

           max = buffer[i];

    }

   

    return max;

}

这个算法非常经典,时间复杂度是:O(N)。对于查找一个数组中的最大数字,我们至少要做的就是把数组扫描一遍,能在只扫描数组一遍的情况下就能解决问题的则算法已经是一个不错的算法的了。

查找第二大的数的算法就是在查找最大数的算法的基础上实现的,下面给出查找第二大数的程序:

 

#define  ARRSIZE             10

#define  MINNUMBER          0xFFFFFFFF

#define  FIND_SUCESS         1

#define  FIND_FAIL          0

int GetSecondMaxNumber(int buffer[],int *secondMax)

{

    int i,max;

 

    max = buffer[0];

    *secondMax = MINNUMBER;

    for(i=1;i<ARRSIZE;i++)

    {

       if(buffer[i] > max)

       {

            *secondMax = max;

           max = buffer[i];

       }

       else if (buffer[i] > *secondMax  && buffer[i] < max)

            *secondMax = buffer[i];

    }

    if(*secondMax == MINNUMBER) //The numbers are all the same.

       return FIND_FAIL;

 

    return FIND_SUCESS;

}

查找第二大数实际上是伴随在查找最大数的过程中的。

1、如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。

2、 如果当前的元素大于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。――判断条件不能仅仅只是大于第二大的数secondMax,否则我们便无法处理” 99,99,88,86,68,66 ”这种情况。

PS:这个函数在调用时需要判断函数的返回值是否是 FIND_SUCESS 才能使用。


 发表于: 2007-07-13,修改于: 2007-07-13 10:12
 已浏览1529次,有评论2条
推荐 投诉

  网友评论
  本站网友 时间:2007-12-17 10:40:20 IP地址:123.117.66.★
谢谢你,看了你的文章对我很有帮助!

  本站网友 时间:2008-04-07 20:58:12 IP地址:60.28.138.★
经典,谢啦


  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:3.15712

京ICP证041476号