寻找数组中的最大值最小值
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); }
相关文章推荐
- 编程之美_2.10_寻找数组中的最大值和最小值
- 寻找数组中的最大值和最小值
- 寻找数组中的最大值和最小值
- 寻找数组中 的最大值最小值
- 《编程之美》学习笔记——2.10寻找数组中的最大值和最小值
- 编程之美:寻找数组中的最大值和最小值
- 寻找数组中 的最大值最小值
- 寻找数组中的最大值最小值问题
- 寻找数组中的最大值最小值问题
- 寻找数组中的最大值和最小值
- 分治法解决寻找数组中最大最小值的问题
- 寻找数组中的最大值和最小值
- [算法导论]在一个数组中寻找最大值和最小值所需要进行比较的次数
- 如何寻找数组中的最大值和最小值
- 编程之美:第二章 数字之魅 2.10寻找数组中的最大值和最小值
- 编程之美《寻找数组中的最大最小值》
- 寻找数组的最大值与最小值
- 如何寻找数组中的最小值与最大值
- 数字之魅:寻找数组中的最大值和最小值
- 随机产生20个[10,50]的正整数,存到数组中并求数组中的所有元素的最大值最小值,平均值以及各个元素之和