方法一:

#include "stdio.h"
#include "stdlib.h"
//初始化最大值为a[0],次大值为a[1],遍历一次,每次比较并更新最大值和次大值,最后就可以得到次大值。
int findsecondmaxvalue(int *a,int size)
{
int i,max,s_max;
max=a[0];  //最大值
s_max=a[1];  //次大值
for(i=0;i<size;i++)
{
if(a[i]>max)
{
s_max=max;  //更新最大值和次大值
max=a[i];
}
else if(a[i]<max && a[i]>s_max)   //更新次大值
s_max=a[i];
}
return s_max;
}
int main(void)
{
int second,a[]={111,23,3,5,652,2,3};
second=findsecondmaxvalue(a,sizeof(a)/sizeof(a[0]));
printf("这个数组中的次大值为:%d\n",second);
system("pause");
return 0;
}

方法二:

/*
写一个函数找出一个整数数组中,第二大的数(microsoft)
要求效率尽可能高
*/
#include "stdio.h"
#include "stdlib.h"
int find(int *a,int n)   //从数组的第二个元素开始查找
{
int i,second=a[1];
for(i=1;i<n;i++)
{
if(a[i]>second)
second=a[i];
}
return second;
}
int findsecondmaxvalue(int *a,int size)
{
int i,first,second;
first=second=a[0];
for(i=1;i<size;i++)
{
if(a[i]>first)
{
second=first;
first=a[i];
}
else if(a[i]<first && a[i]>second)
second=a[i];
}
//最大值和次大值相等(数组的第一个元素为最大值的时候)
if(first==second)
{
second=find(a,size); //从数组的第二个元素开始找一个最大值的即为次大值
}
return second;
}
int main(void)
{
int a[] = {12012, 3, 45, 5, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5};
int second=findsecondmaxvalue(a,sizeof(a)/sizeof(a[0]));
printf("这个数组中的次大值为:%d\n",second);
system("pause");
return 0;
}

寻找数组中的第二大数相关推荐

  1. 经典算法详解(2)寻找数组中的次大数

    题目:10个互不相等的整数,求其中的第2大的数字,要求数组不能用排序,设计的算法效率越高越好. 1 #include<iostream> 2 3 using namespace std; ...

  2. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  3. 寻找数组中 的最大值最小值

    最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...

  4. 编程之美2.10 寻找数组中的最大值和最小值

    这个问题其实很容易解决,就是循环遍历一遍数组,然后找到数组中存在的最大值和最小值就可以了,书中主要讨论的问题是比较次数较小的方法,不过,书中已经证明了,无论用什么方法最少的比较次数也就是循环遍历一遍的 ...

  5. 算法-寻找数组中的重复值,四种解法

    算法-寻找数组中的重复值 寻找数组中的重复值 寻找数组中的重复值 题目来源于:Leetcode-287.本题归类到简单我无法理解-要满足四个条件需要用很特定的解法,面试中要是用到的话很可能是在给自己挖 ...

  6. 线性时间复杂度求数组中第K大数

    求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边:将比支点小的数放到数组右边:将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K &l ...

  7. 基于递归寻找数组中的最大数字

    问题描述:寻找数组中的最大数字: # 寻找数组中的最大值,这个写法真的可以啊 def find_max(arr):# 先找基线条件if len(arr) == 0:return -1if len(ar ...

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

    题目:写一个函数找出一个整数数组中,第二大的数. 算法分析: 1)假设数组中的前两个元素就是最大和第二大,即max和smax: 2)从数组的第二个元素开始遍历数组,当有元素大于max的时候,将max赋 ...

  9. 寻找数组中最接近目标的数字,Java实现

    给出一个排好序的整数数组.需要找到与给定数字最接近的值.数组可能包含重复的值 和负数. 例: Input : arr[] = {1, 2, 4, 5, 6, 6, 8, 9} Target numbe ...

最新文章

  1. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...
  2. Jarvis OJ web(一)
  3. xenserver PXE安装系统错误的解决
  4. 程序员简历的 8 个建议
  5. adf时间作用域_ADF任务流:页面片段的托管bean作用域
  6. [奇葩 bug]视图在 ipad5 上正常显示,在 iPad3上超出了边界
  7. maatkit使用总结
  8. 又推亲儿子,苹果与国际权威机构推出 Swift 资格认证
  9. 信息学奥赛一本通1368 对称二叉树
  10. 后缀树(一)定义及构造
  11. 下载flash文件的若干方法!
  12. Less 颜色操作函数Mix的计算方法
  13. Astronauts UVALive - 3713(2-SAT)
  14. Java关于日志,及日志的error和warn的选择
  15. 安卓apk360加固
  16. 苦逼程序猿的求职经历
  17. 可自定义存储数据总空间的的类int_128函数库
  18. 盛语小智教育机器人是骗人的_盛语小智机器人骗局揭露【是不是真的有效】多久可以见...
  19. Windbg基础-了解Symbols zz
  20. 新浪微博html5手机版,新浪微博手机版2018

热门文章

  1. Problem A: 素数对
  2. 究竟什么是云原生DevOps呢?
  3. 用unity制作简单的太空游戏(1):简单飞船控制
  4. PHP面试题:写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())
  5. Python编程专属骚技巧6
  6. 【MySQL】计算 TPS,QPS 的方式
  7. ORA-01031 权限不足-过程中DBA 角色用户无法执行DDL
  8. iphone5登陆不了微信,提示“登录失败,连接失败,请检查网络设置”
  9. Oracle 中control_file_record_keep_time参数的解释
  10. 常见Linux面试题总结