【算法导论】最大值和最小值-阿里云开发者社区

开发者社区> tengweitw> 正文

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

简介: 最大最小值 时间复杂度: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


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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10085 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10883 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13890 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11818 0
【算法导论】最大值和最小值
最大最小值 时间复杂度:O(3*floor(n/2)) 基本思想:成对地处理元素。先将一对输入元素相互比较,然后把较小的与当前最小值比较,较大的与当前最大值比较,因此每两个元素比较三次。
799 0
经典算法详解(11)递归查找数组中的最大值
题目:编写一个程序,用递归的方法实现查找数组中的最大值。 C++实现 1 #include 2 3 using namespace std; 4 //第一种方法是常规方法,不是使用递归,首先将第一个元素的值赋值给max,然后遍历数组, 5 //当遇到超高max的值时将其赋值给max,最...
1354 0
社交网络影响力最大化——线性阈值模型(LT模型)算法实现(Python实现)
社交网络影响力最大化——线性阈值模型(LT模型)算法实现(Python实现) 环境配置:Win7 Pycharm Anaconda2 该算法每个节点的阈值设为 0.
3094 0
2019年5月下旬最值得一读的9本技术书籍(微服务架构、算法、大数据等书籍)!
导读:读书,能让我们遇到好的书中好的方法、思想,不时的看看,就会让我们的头脑中思考的神经通路发达起来,慢慢地,我们就能够有了一些 积累,就会有了好的思维习惯。云栖社区小编为你整理出了2019年5月下旬最值得一读的9本技术书籍,其中涉及服务架构、算法、Flink等方面。
20370 0
+关注
tengweitw
所在学校:西电 兴趣爱好:编程、英语,象棋,乒乓球 email:771257840@qq.com
159
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载