树形选择排序(锦标赛排序)
树形选择排序(Tree Selection Sort)也称作锦标赛排序,是一种按照锦标赛的思想进行选择排序的方法。
算法思路
[算法步骤]
首先对n个记录的关键字进行两两对比,然后在其中 ⌈ n 2 ⌉ \Big\lceil \frac{n}{2} \Big\rceil ⌈2n⌉个较小者之间再进行两两比较,如此反复,直至选出最小关键字的记录为止。这个过程可以用一棵有n个叶子结点的完全二叉树表示。
例如,下图中的二叉树表示从8个关键字中选出最小关键字的过程。
① 8个叶子结点中依次存放排序之前的8个关键字,每个非终结点中的关键字均等于其左、右孩子结点中较小的关键字,则根结点的关键字即为叶子结点中的最小关键字。
② 再输出最小关键字之后,根据关系的可传递性,欲选出次小关键字,仅需要将叶子节点中的最小关键字(13)改为“最大值”,然后从该叶子结点开始,和其左(或右)兄弟的关键字进行比较,修改从叶子结点到根的路径上各结点的关键字,则根结点的关键字即为次小关键字。
③ 同理,可依次选出从小到大的所有关键字。
选出最小关键字为13
选出次小关键字为27
选出第三小关键字为38
算法实现
定义存放记录的线性表结构
代码实现
测试案例
测试结果
算法分析
① 时间复杂度:
由于含有n个叶子结点的完全二叉树的深度为 ⌈ log 2 n ⌉ \Big\lceil \log_{2}^{n} \Big\rceil ⌈log2n⌉+1,则再树形选择排序中,除了最小关键字之外,每选择一个次小关键字仅需要进行 ⌈ log 2 n ⌉ \Big\lceil \log_{2}^{n} \Big\rceil ⌈log2n⌉次比较,因此,它的时间复杂度为O(n log 2 n \log_{2}^{n} log2n)。
② 空间复杂度
辅助存储空间较多
[算法特点]
树形选择排序方法存在辅助存储空间较多、和“最大值”进行多余的比较等缺点。为了改进这个缺点,提出了新的选择排序–堆排序。