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

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


目录
相关文章
|
3月前
|
算法 测试技术 C#
【单调队列】LeetCode1499:满足不等式的最大值
【单调队列】LeetCode1499:满足不等式的最大值
【单调队列】LeetCode1499:满足不等式的最大值
|
3月前
|
C++ Python 容器
leetcode-515:在每个树行中找最大值
leetcode-515:在每个树行中找最大值
16 0
|
3月前
leetcode-153:寻找旋转排序数组中的最小值
leetcode-153:寻找旋转排序数组中的最小值
19 0
|
3月前
每日一题——寻找旋转排序数组中的最小值(I)
每日一题——寻找旋转排序数组中的最小值(I)
|
5月前
|
JavaScript 前端开发 C语言
leetcode每日一题 2021/4/8 153. 寻找旋转排序数组中的最小值
leetcode每日一题 2021/4/8 153. 寻找旋转排序数组中的最小值
29 0
|
5月前
|
JavaScript 前端开发
leetcode每日一题 2021/4/9 154. 寻找旋转排序数组中的最小值 II
leetcode每日一题 2021/4/9 154. 寻找旋转排序数组中的最小值 II
26 0
|
11月前
|
算法 C++ Python
每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
|
11月前
Leetcod 剑指offer 59 滑动区间最大值
Leetcod 剑指offer 59 滑动区间最大值
48 0
|
前端开发
前端学习案例26-二叉搜索树的最大值和最小值1
前端学习案例26-二叉搜索树的最大值和最小值1
38 0
前端学习案例26-二叉搜索树的最大值和最小值1
|
前端开发
前端学习案例27-二叉搜索树的最大值和最小值2
前端学习案例27-二叉搜索树的最大值和最小值2
31 0
前端学习案例27-二叉搜索树的最大值和最小值2