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

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

解法:最简单的是扫描一遍数组,需要比较2*N次才能求解。

解法二:首先在概念上把连个相邻的数分在同一组,只是想象而已,无须任何操作。然后比较同一组的奇数位数字和偶数位数字,将较大的数放在偶数位上,较小的数放在奇数位上。N/2次比较久可以调好。然后求出偶数位上的Max,和奇数位上的Min,各须比较N/2次。总共须比较1.5*N次。  若不破坏原数组,只需用两个变量Max和Min来存储当前的最大值和最小值,当比较完奇数位和偶数位上的数字后,不调整位置,直接再和当前Max和当前Min比。整个过程仍比较1.5*N次。

解法三:利用分治思想。分别求出前后N/2个数的Min和Max,然后去较小的Min,较大的Max即可。比较次数为1.5*N-2.

原文地址:https://www.cnblogs.com/wen-ge/p/4106997.html