求数组次大值
来源:互联网 发布:线性映射及其矩阵表示 编辑:程序博客网 时间:2024/06/16 20:19
在一维整型数组中找出比数组元素最大值小的次大元素的下标,有一个符合条件元素则输出一个下标,有多个符合条件元素则输出多个下标。其中,寻找次大元素下标的函数原型为:int findSecondMax(int *p, const int len);
#include<stdio.h>#include<stdlib.h>int main(void){ int a[8]={1,3,8,2,9,5,4,8}; //定义数组 int i;//定义变量 int findSecondMax(int *p, const int len); //函数声明语句 printf("一维数组中的元素是:"); for( i=0 ; i<8 ; i++) { printf("%d ",a[i]); } printf("\n"); findSecondMax(a, 8); //调用函数 printf("\n"); system("pause"); return 0;}int findSecondMax(int *p, const int len) //函数的定义{ int i,max,semax,count=0; //定义最大值和最小值变量 max=semax=p[0]; for(i=0;i<len;i++) //通过循环找最大值 { if(max<p[i]) { max=p[i]; } } for(i=0;i<len;i++) //找出次大值 { if((semax<p[i])&&(p[i]<max)) { semax=p[i]; } } printf("次大元素(%d)的下标是:",semax); for(i=0;i<len;i++) //利用循环找出次大元素下标 { if(semax==p[i]) { if(count!=0) printf(",%d",i); //如果不是第一个次大元素,前面输出一个逗号 else printf("%d",i); //如果是第一个次大 元素,原样输出 count++; } }}
找出数组中的最大值和次大值
用分治法,先求出左边的最大值leftmax和次大值leftsecond,再求出右边的最大值rightmax和次大值rightsecond,然后合并,如何合并呢?分情况考虑
1 如果leftmax > rightmax,那么可以肯定leftmax是最大值,但次大值不一定是rightmax,但肯定不是rightsecond,只需将leftsecond与rightmax做一次比较即可。
2 如果rightmax > leftmax,那么可以肯定rightmax是最大值,但次大值不一定是leftmax,但肯定不是leftsecond,所以只需将leftmax与rightsecond做一次比较即可。
- // 找出数组的最大值和次大值,a是待查找的数组,left和right是查找区间,max和second存放结果
- void MaxandSec(int a[], int left, int right, int&max, int&second)
- {
- if(left == right)
- {
- max = a[left] ;
- second = INT_MIN;
- }
- else if(left +1== right)
- {
- max = a[left] > a[right] ? a[left] : a[right] ;
- second = a[left] < a[right] ? a[left] : a[right] ;
- }
- else
- {
- int mid =(right + left) /2 ;
- int leftmax ;
- int leftsecond ;
- MaxandSec(a, left, mid, leftmax, leftsecond) ;
- int rightmax ;
- int rightsecond ;
- MaxandSec(a, mid +1, right, rightmax, rightsecond) ;
- if (leftmax > rightmax)
- {
- max = leftmax ;
- second = leftsecond > rightmax ? leftsecond : rightmax ;
- }
- else
- {
- max = rightmax ;
- second = leftmax < rightsecond ? rightsecond : leftmax ;
- }
- }
- }
1 0
- 求数组次大值
- 求数组中的次大值
- 求数组中的次大值
- 求数组的最大值,次大值
- 求一个数组中的最大和次大值
- 求数组的最大值和次大值
- C 求字符数组最大值与次大值
- 求数组中最大值和最小值 以及 求数组中最大值和次大值 最小比较次数
- 求数组最大子数组
- 二维数组求最大值
- 求数组长度
- 数组中求最大值
- sizeof() 求数组长度
- 求最大子数组
- 求最大子数组
- 求数组长度
- 求数组中的最大值
- 求最大子数组
- ajax局部刷新
- 数据结构排序算法
- ios支付宝集成各种血泪坑和第三方平台不支持64位的解决办法
- scala类型参数的问题
- Repeater嵌套绑定Repeater
- 求数组次大值
- [leetcode] Subsets
- PDF转word在线转换
- VS2010 libmingwex.lib 无法解析的外部符号__imp____lc_codepage 错误
- Android项目开发前准备工作(二)
- Android Service完全解析,关于服务你所需知道的一切(下)
- 细说HTML元素的隐藏和显示display+visiblity
- HTTP常见错误
- 《大型网站技术架构》总结---架构演化