编程之美--寻找数组中的最大值和最小值

本文探讨了三种不同的算法来寻找数组中的最大值和最小值,包括一次遍历法、两两比较法及分治法,并提供了分治法的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、题目:对于一个由N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来?

例如,数组{5,6,8,3,7,9},其中Max=9, Min=3.

解法一:

扫描一遍数组,分别找出最大和最小值,需要比较2N次。

解法二:

一般情况下,最大和最小的数不会是同一个,首先按顺序将数组中相邻的两个数分在同一组(只是概念上的分组),接着比较同一组中奇数位数字和偶数位数字,将较大的数放在偶数位上,将较小的数放在奇数位上。经过N/2次比较后,较大的数放到了偶数位上,较小的数放到了奇数位上。

解法三:

分治法,分别求出前后N/2个数的Min和Max,然后取较小的Min、Max即可。(只需较大的数和较大的数比较,较小的数和较小的数比较。两次就可以了)

(max, min)Search(arr, b, e)
{
	if(e-b <= 1)
	{
		if(arr[b] < arr[e])
			return (arr[e], arr[b]);
		else
			return (arr[b], arr[e]);
	}
	(maxL, minL) = Search(arr, b, b+(e-b)/2);
	(maxR, minR) = Search(arr, b+(e-b)/2+1, e);

	if(maxL > maxR)
		maxV= maxL;
	else
		maxV= maxR;

	if(minL < minR)
		minV= minL;
	else
		minV= minR;

	return (maxV, minV);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值