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

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


目录
相关文章
|
存储 NoSQL 索引
MongoDB聚合—计数count
MongoDB聚合—计数count
8472 0
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
国产AI神器Deepseek,本地离线使用教程!
国产AI神器Deepseek,本地离线使用教程!
1182 14
|
传感器 自动驾驶 安全
未来出行的智能革命:自动驾驶技术的现状与前景
在科技迅猛发展的今天,自动驾驶技术正逐步从科幻走进现实。本文将深入探讨自动驾驶的技术原理、当前发展现状以及未来的应用前景。我们将从感知、决策和执行三个核心层面剖析自动驾驶系统的工作机制,并讨论其在不同场景中的应用。同时,通过分析技术发展面临的挑战和瓶颈,我们展望了自动驾驶技术的未来图景,并思考其可能对社会、经济和法律等方面带来的深远影响。
1202 3
|
存储 运维 数据安全/隐私保护
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
如何高效利用阿里云Docker镜像仓库管理您的容器镜像
|
存储 API iOS开发
苹果手机iOS如何使用http代理
我们使用苹果手机访问网络时,有时候需要配置代理服务器。下面就来介绍一下。
苹果手机iOS如何使用http代理
|
SQL 关系型数据库 测试技术
postgresql|数据库|数据库测试工具pgbench之使用
postgresql|数据库|数据库测试工具pgbench之使用
742 0
|
小程序 JavaScript 前端开发
【易售小程序项目】项目创建+整合UI组件(FirstUI和uView)
【易售小程序项目】项目创建+整合UI组件(FirstUI和uView)
284 0
|
弹性计算 容灾 Cloud Native
极致的稳定性和高可用,揭秘 ALB Ingress 云原生网关(上)
极致的稳定性和高可用,揭秘 ALB Ingress 云原生网关(上)
321 0
|
安全
电子商务的系统架构
电子商务的系统架构
429 0
|
Dragonfly Cloud Native 算法
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践
Dragonfly 和 Nydus 都是来自 CNCF 的优秀开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深入合作,使它变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Dragonfly 一定会在云原生生态中扮演重要角色。
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践