数据结构之树形选择排序(锦标赛排序)

锦标赛排序和树形选择排序

锦标赛排序也叫树形选择排序,是一种按照锦标赛的思想进行选择的排序方法,该方法是在简单选择排序方法上的改进。简单选择排序,花费的时间大部分都浪费在值的比较上面,而锦标赛排序刚好用树保存了前面比较的结果,下一次比较时直接利用前面比较的结果,这样就大大减少比较的时间,从而降低了时间复杂度,由O(n^2)降到O(nlogn),但是浪费了比较多的空间,“最大的值”也比较了多次。

大概过程如下:

首先对n个记录进行两两比较,然后优胜者之间再进行两两比较,如此重复,直至选出最小关键字的记录为止。

类似甲乙丙三队比赛,前提是有这样一种传递关系:若乙胜丙,甲胜乙,则认为甲必能胜丙。

锦标赛排序图解如下

初始序列,这么多队伍参加比赛

这里写图片描述

两两比较之,用一个完全二叉树表示,反复直到一趟比较后,选出冠军

这里写图片描述

找到了 Li,是冠军,选出冠军的比较次数为 2^2+2^1+2^0 = 2^3 -1 = n-1,然后继续比较,把原始序列的 Li 去掉

这里写图片描述
这里写图片描述

选了 Cha,选出亚军的比较次数为 3,即 log2 n 次。 同理,把 cha 去掉,继续两两比较
这里写图片描述
这里写图片描述
找到了 Liu,其后的 n-2 个人的名次均如此产生

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

所以对于 n 个参赛选手来说,即对 n 个记录进行锦标赛排序,总的关键字比较次数至多为 (n-1)log2 n + n -1,故时间复杂度为: O(nlogn)。
最后结果:
这里写图片描述

此法除排序结果所需的 n 个单元外,尚需 n-1 个辅助单元。

这个过程可用一棵有n个叶子结点的完全二叉树表示,根节点中的关键字即为叶子结点中的最小关键字。在输出最小关键字之后,根据关系的可传递性,欲选出次小关键字, 仅需将叶子结点中的最小关键字改为“最大值”,如∞,然后从该叶子结点开始,和其左(右)兄弟的关键字进行比较,修改从叶子结点到根的路径上各结点的关键字,则根结点的关键字即为次小关键字。

也就是所谓的树形选择排序,这种算法的缺点在于:辅助存储空间较多、最大值进行多余的比较。

树形选择排序

思想:首先对 n 个记录的关键字进行两两比较,然后在其中 不大于 n/2 的整数个较小者之间再进行两两比较,直到选出最小关键字的记录为止。可以用一棵有 n 个叶子结点的完全二叉树表示。

树形选择排序图解如下:

这里写图片描述
对 n 个关键字两两比较,直到选出最小关键字为止,一趟排序结束
这里写图片描述

反复这个过程,仅需将叶子结点的最小关键字改为最大值∞,即可

这里写图片描述

然后从该叶子结点开始,继续和其左右兄弟的关键字比较,找出最值
这里写图片描述

这里写图片描述

时间复杂度:由于含有 n 个叶子结点的完全二叉树的深度为,则在树形选择排序中,除了最小关键字外,每选择一个次小关键字仅需进行 次比较,故时间复杂度为 O(n logn)。

缺点: 1、与“∞”的比较多余; 2、辅助空间使用多。

为了弥补这些缺点,1964年,堆排序诞生。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值