加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

寻找数组中的第二大数

发布时间:2020-12-14 02:25:11 所属栏目:大数据 来源:网络整理
导读:转自http://m.blog.csdn.net/blog/xiyoukeke/6366197 前几天得知腾讯招聘测试人员的笔试题中的一道附加题是寻找数组中的第二大数,故考虑其做法,在此在此做一小结。 ???? 找数组中的第二大数是一个查找过程,一般返回的应该是第二大数在数组中的位置,但若

转自http://m.blog.csdn.net/blog/xiyoukeke/6366197

前几天得知腾讯招聘测试人员的笔试题中的一道附加题是寻找数组中的第二大数,故考虑其做法,在此在此做一小结。

???? 找数组中的第二大数是一个查找过程,一般返回的应该是第二大数在数组中的位置,但若有其他用途,也可以返回该值

是否找到的标志和它的真值。估有两种做法,但其基本思想都是用一个新数与当前的最大数进行比较,若新数大于最大数,

则新书则成为最大数,最大数退居第二大数;若新数大于当前的第二大数并且新书小于最大数,则新数成为第二大数。

方法一:

???? 返回值为次大数在数组中的位置。

#include <stdio.h>
#include <stdlib.h>

int find_secmax(int data[],int count);
int find_secmax(int data[],int count)
{
??? int max = 0,secmax = -1;
??? int i;

??? for(i = 0; i < count; i++)
??? {
??? ??? ??? if(data[i] > data[max])
??? ??? ??? {
??? ??? ??? ??? secmax = max;
??? ??? ??? ??? max = i;
??? ??? ??? }
??? ??? ??? else if(data[i] > data[secmax]?
??????????????????? && data[i] < data[max])
??? ??? ??? {
??? ??? ??? ??? secmax = i;
??? ??? ??? }
??? ????
??? }

??? return secmax;
}

void main()
{
??? int data[5];
??? int i,second;
????
??? printf("/nInput data:");
??? for(i = 0; i < 5; i++)
??? {
??? ??? scanf("%d",data+i);
??? }

??? second = find_secmax(data,5);
??? printf("%d",second);
}

?

方法二:

返回是否找到标志和第二大数真值。

#include <stdio.h>

#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)???????????????????
??? {
?????? return FIND_FAIL;
??? }??????
??? return FIND_SUCESS;
}

/*主函数*/ void main() { ???? int array[ARRSIZE],result,secondMax,i; ????? ???? printf("请输入数组元素:"); ???? for(i = 0; i < ARRSIZE; i++) ???? { ?????????? scanf("%d",&array[i]);?????? ???? }???? ????? ???? result = GetSecondMaxNumber(array,&secondMax); ???? if(result =? FIND_SUCESS) ???? { ?????????? printf("/n数组中的第二大数为%d",secondMax);?????????? ???? } }?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读