现有包含10个元素的无序序列,采用锦标赛排序进行升序排序。在整个排序过程中,需要比较的次数范围是:
答案解析
锦标赛排序是一种树形选择排序。每轮比较都是两两比较,直到选出胜者。在最坏的情况下,每次比较都会淘汰一个元素,直到只剩下一个最大的元素。在第一次比较时需要5次比较淘汰5个元素,然后5个元素再比较需要3次比较淘汰2个元素,剩下的3个元素比较需要2次比较淘汰一个元素,最后2个元素比较需要1次比较淘汰1个元素,所以总共需要5+3+2+1=11次比较才能选出最小值。这和我们所看到的锦标赛比赛的淘汰赛制的原理一致。但是当我们需要选择第二小的值的时候,我们还需要再次进行比较,需要将之前比赛中,淘汰最小值的所有节点,继续向上比较。那么对于10个元素的序列,它的初始比较次数为10-1=9次。然后我们继续向上选取第二小的元素时候,由于我们采用了锦标赛排序,那么每一次比较都会淘汰一个元素,并且我们不需要再比较整个序列。所以我们从二叉树的下层向上比较,由于10个元素可以构成深度为4的二叉树,所以,最坏情况为需要比较4次。那么如果我们需要排序完整个序列,那么每一轮选出一个最小值都要进行一次比较,因此,每次选出一个元素,最多比较4次,那么排序完所有元素需要比较9+4*9=45次。但是最小的比较次数为9次。所以最小值是9,最大值是45,但是如果使用递归的方式完成这个过程。那么每一轮都需要进行比较,那么每一轮的比较次数都接近n-1,那么总的比较次数为 9+8+7+6+5+4+3+2+1=45. 所以最小的次数为9,最大的比较次数为45。 但是需要注意,这个比较次数是有区别的。锦标赛排序比较次数的范围在于每一次选出最小的元素时,由于锦标赛树形结构的存在,可以减少不必要的比较,因此比较的次数范围在于 初始的n-1 到 (n-1)*log2(n). 这里n为10,因此最小值是9,最大值小于等于27,但是由于该排序过程并不是所有元素都参与了比较,所以我们不能简单的使用(n-1)*log2(n)计算。 需要考虑每一次比较都要向上寻找胜者,故最大值为45。因此,最小值是9,最大值是45
正确答案:A