对于一个由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.