码迷,mamicode.com
首页 > 编程语言 > 详细

寻找数组中的最大值最小值

时间:2015-04-23 09:45:16      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:算法

解法一:

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


解法二:

     一般情况下,最大值和最小值不相同。所以把数组分成两部分,然后再从这两部分中分别找出最大值和最小值。

技术分享

      最后,从奇偶数位上分别求出Max=9,Min=3,各需要比较N/2次,整个算法共需要比较1.5*N次。


解法三:

     解法二破坏了数组,如果在遍历过程中进行比较,而不需要交换元素,就可以不破坏数组了。首先仍然按顺序将数组中相邻的两个数分在同一组(概念上的分组),然后利用两个变量Max,和Min存储最大值和最小值,然后同一组的两个数比较,但不交换顺序,而是将Min和较小的值比较.如果比Min小,则更新Min为该值。Max和较大的值比较,技术分享

     最后,Max=9,Min=3.但是时间复杂度并未降低,整个过程中的比较次数仍为1.5*N次。


解法四:
      采用分治思想,在N个数中求最大值Max和最小值Min,只需要分别求出前后N/2个数的Min和Max,然后取较小的Min,和较大的Max即可。(只需要较大的数和较大的数比较,较小的数和较小的数比较,两次就可以了).

         假设我们要求arr[1,2,3.....n]数组的最大值和最小值,伪代码如下:

(max,minSearch(arr,b,e)
{
	if (b-e<=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=minL;
	else
		maxV=minR;
	if (minL<minR)
	    minV=minL;
	else 
		minV=minR;
	return (maxV,minV);
}
技术分享技术分享

寻找数组中的最大值最小值

标签:算法

原文地址:http://blog.csdn.net/wangfengfan1/article/details/45200001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!