这道题最笨的方法就是先从16个数中选出最大的数,然后再从剩下的15个数中选出最大数就可得到答案,因此,需要15+14=29次比较。
既然这道题要求在20次比较之内就能找出第二大的数,那我们就想能简单的方法。
假设16个数中最大的是A,第二大的是B。
首先将16个数两两进行比较,较大者胜出,然后再在胜出者中进行两两比较,按此方法,最后选出最大数A,如下所示
红色路线是最大数经过的路径。
接下来分析B可能存在的位置。
将16个数分为左部分和右部分各8位:
1、如果A和B在两个不同的部分(A在左部分,B在右部分,则B是右部分的最大者),因此按照上面的比较方法,B将在根节点的右子节点,即图中红色1节点;
2、如果A,B处于同一个部分(假设都在左部分,如果同在右部分,分析方法一样),则在左部分的8个节点中,按照方法1继续划分查找;
通过这种方式分析可以知道,A和B一定会做一次比较(想想为什么)。在图中,如果A按照红色路线上升,则B可能出现的位置就是红色节点1,2,3,4。
四个红色位置比较要3次。
因此最终需要:
8+4+2+1+3=18