【算法导论】最大值和最小值
2013-07-31 12:15
246 查看
最大最小值
时间复杂度:O(3*floor(n/2))基本思想:成对地处理元素。先将一对输入元素相互比较,然后把较小的与当前最小值比较,较大的与当前最大值比较,因此每两个元素比较三次。
注意分情况:当n为奇数时,将最大值和最小值都设置为第一个元素值;当n为偶数时,将前两个元素较大的元素设置为最大值,较小的设置为最小值。
其具体实现如下:
#include<stdio.h> void MinMax(int* arrayA,int n,int* minmax); void main() { int minmax[2]={0}; int arrayA[10]={4,1,5,7,0,2,5,3,2,9}; int n=sizeof(arrayA)/sizeof(int); MinMax(arrayA,n,minmax); printf("Min=%d Max=%d\n",minmax[0],minmax[1]); } /**************************************************\ 函数功能:查找最大值和最小值 输入:原始数组、用于存储最大最小值的数组 输出:无 \**************************************************/ void MinMax(int* arrayA,int n,int* minmax) { int min=0;//初始化 int max=0; if(n%2==0)//n为奇数 { if(arrayA[0]>arrayA[1]) { max=arrayA[0]; min=arrayA[1];//最大最小值分别赋值为第一二元素 } else { max=arrayA[1]; min=arrayA[0]; } for(int i=2;i<n-1;i++) { if(arrayA[i]>arrayA[i+1]) { if(arrayA[i]>max) max=arrayA[i]; if(arrayA[i+1]<min) min=arrayA[i+1]; } else { if(arrayA[i+1]>max) max=arrayA[i+1]; if(arrayA[i]<min) min=arrayA[i]; } } } else//n为偶数 { max=min=arrayA[0];//最大最小值都赋值为第一个元素 for(int j=1;j<n-1;j++) { if(arrayA[j]>arrayA[j+1]) { if(arrayA[j]>max) max=arrayA[j]; if(arrayA[j+1]<min) min=arrayA[j+1]; } else { if(arrayA[j+1]>max) max=arrayA[j+1]; if(arrayA[j]<min) min=arrayA[j]; } } } minmax[0]=min; minmax[1]=max; }
注意:我是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域,出错体现在循环变量的重复定义上。例如:在vs2008或vs2010上,程序为:
#include<stdio.h>
void main()
{
int i=0;
for(int i=0;i<5;i++)
printf("%d ",i);
}
则在VC 6.0上需改为:
#include<stdio.h>
void main()
{
int i=0;
for(i=0;i<5;i++)
printf("%d ",i);
}
原文:/article/1336011.html
作者:nineheadedbird
相关文章推荐
- 【算法导论】同时找出最大值和最小值
- 【算法导论】同时求数组的最大值和最小值
- 【算法导论】最大值和最小值
- 算法导论9.1 最大值和最小值
- 从一个数组中同时找出最大最小数-算法导论第九章
- 一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。 复杂度如果是O(n2)则不得分。
- 算法题:找出同一个序列中的最大值和最小值
- HDU 1150 Machine Schedule(匈牙利算法 二分图的最小顶点覆盖 二分图最大匹配)
- 算法导论之动态规划之最大子数组
- 【算法导论】最大二分匹配
- 时间复杂度最小的 求两个整数最大公约数算法
- 算法数据结构C++实现7 - 同时查找最大值和最小值优化算法
- STL_算法_最小值和最大值(min_element、max_element)
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- 我遇到的最优的最大公约数与最小公倍数的算法
- 同时寻找最大数和最小数的最优算法 第二大数
- 4.1最大数组问题(算法导论)
- 【图割】最大流/最小割算法详解(Yuri Boykov and Vladimir Kolmogorov,2004 )
- 算法训练 最大值与最小值的计算
- <转> 最小凸包算法(Convex Hull)(1)-Graham扫描法 -计算几何-算法导论