您的位置:首页 > 其它

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

2015-04-22 20:12 288 查看
解法一:分别求出数组中的最大值和最小值。先扫描一遍数组,找出最大的数和最小的数。需要比较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,min) Search(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);
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: