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

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


目录
相关文章
|
关系型数据库 MySQL Docker
docker部署logstash
docker部署logstash
docker部署logstash
|
传感器 自动驾驶 安全
未来出行的智能革命:自动驾驶技术的现状与前景
在科技迅猛发展的今天,自动驾驶技术正逐步从科幻走进现实。本文将深入探讨自动驾驶的技术原理、当前发展现状以及未来的应用前景。我们将从感知、决策和执行三个核心层面剖析自动驾驶系统的工作机制,并讨论其在不同场景中的应用。同时,通过分析技术发展面临的挑战和瓶颈,我们展望了自动驾驶技术的未来图景,并思考其可能对社会、经济和法律等方面带来的深远影响。
1451 3
|
传感器 存储 人工智能
STM32第一章-寄存器你懂吗?
嵌入式系统是小型计算机的一个分支系统。平常用的PC,就属于功能比较专一的计算机,从核心的处理器来说,可以分成嵌入式微处理器和嵌入式微控制器,我们传统意义上的那种单片机,比如说像51、AVR还有按里面比较低配的一些,比如说像Cortex-M系列的这一类,我们都把它划分为微控制器,微处理器呢,就相对来说处理能力,运算能力要强一些,比如ARM9以上的系列和 Cortex-A以及以上系列。STM32属于一个微控制器,请大家牢牢记住微控制器这四个字。STM32自带了各种常用通信接口,比如USART、I2C、SPI等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有STM3
1269 0
 STM32第一章-寄存器你懂吗?
|
存储 运维 数据安全/隐私保护
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
数据结构——二叉树的遍历【前序、中序、后序】
数据结构——二叉树的遍历【前序、中序、后序】
|
SQL 关系型数据库 测试技术
postgresql|数据库|数据库测试工具pgbench之使用
postgresql|数据库|数据库测试工具pgbench之使用
1083 0
|
消息中间件 NoSQL 算法
基于SpringBoot + MyBatis + Caffeine + Redis + MySql + Kafka实现一个论坛网站 附完整代码
基于SpringBoot + MyBatis + Caffeine + Redis + MySql + Kafka实现一个论坛网站 附完整代码
719 0
基于SpringBoot + MyBatis + Caffeine + Redis + MySql + Kafka实现一个论坛网站 附完整代码
|
Dragonfly Cloud Native 算法
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践
Dragonfly 和 Nydus 都是来自 CNCF 的优秀开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深入合作,使它变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Dragonfly 一定会在云原生生态中扮演重要角色。
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践
|
JavaScript 前端开发 测试技术
Vue的安装及使用(Vue的三种安装使用方式)
Vue的安装及使用(Vue的三种安装使用方式)
505 0
Vue的安装及使用(Vue的三种安装使用方式)
|
存储 JavaScript 前端开发
如何创建BSC币安链DAPP智能合约系统开发方案详细
DAPP智能合约开发流程是怎样?   基本流程Asch有三种网络类型,分别是localnet,testnet,mainnet,后两种是发布到线上的,可以通过公网访问。第一种localnet是运行在本地的,只有一个节点的私链,主要是为了方便本地测试和开发。Dapp的开发同样要涉及到这三种网络,即第一步,在localnet的开发,本地测试第二步,在testnet测试第三步,正式发布到mainnet。
如何创建BSC币安链DAPP智能合约系统开发方案详细