开发者社区> tengweitw> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【算法导论】最大值和最小值

简介: 最大最小值 时间复杂度:O(3*floor(n/2)) 基本思想:成对地处理元素。先将一对输入元素相互比较,然后把较小的与当前最小值比较,较大的与当前最大值比较,因此每两个元素比较三次。
+关注继续查看

最大最小值

时间复杂度: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);
} 


原文:http://blog.csdn.net/tengweitw/article/details/9665973

作者:nineheadedbird


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用递归求出最大值 | 学习笔记
快速学习使用递归求出最大值
0 0
1877.数组中最大数对和的最小值 小学生都会的中等题?
1877.数组中最大数对和的最小值 小学生都会的中等题?
0 0
[LeetCode 逐步求和得到正数的最小值] | 刷题打卡[3]
给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。
0 0
[剑指offer] 滑动窗口的最大值
本文首发于我的个人博客:[尾尾部落](https://weiweiblog.cn/maxinwindows/) 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
925 0
POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 Case Time Limit: 2000MS ...
931 0
+关注
tengweitw
所在学校:西电 兴趣爱好:编程、英语,象棋,乒乓球 email:771257840@qq.com
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载