
- b3 PK b4,b3胜b4负,内部结点ls[4]的值为3;
- b3 PK b0,b3胜b0负,内部结点ls[2]的值为3;
- b1 PK b2,b1胜b2负,内部结点ls[3]的值为1;
- b3 PK b1,b3胜b1负,内部结点ls[1]的值为3。
- b3 PK b4,b3胜b4负,内部结点ls[4]的值为3;
- b3 PK b0,b0胜b3负,内部结点ls[2]的值为0;
- b1 PK b2,b1胜b2负,内部结点ls[3]的值为1;
- b0 PK b1,b1胜b0负,内部结点ls[1]的值为1。.


- b3 PK b4,b3胜b4负,内部结点ls[4]的值为4;
- b3 PK b0,b3胜b0负,内部结点ls[2]的值为0;
- b1 PK b2,b1胜b2负,内部结点ls[3]的值为2;
- b3 PK b1,b3胜b1负,内部结点ls[1]的值为1;
- 在根结点ls[1]上又加了一个结点ls[0]=3,记录的最后的胜者。
- 将新进入选择树的结点与其父结点进行比赛:将败者存放在父结点中;而胜者再与上一级的父结点比较。
- 比赛沿着到根结点的路径不断进行,直到ls[1]处。把败者存放在结点ls[1]中,胜者存放在ls[0]中。

1. 直观方法是通过两次冒泡排序,15+14=29 次比较可找到第二大的元素。然而直观方法显然没有应用到一些已经比较过的信息。
2. 采用归并排序,构造胜者树。与该胜者比较过的元素有4个(大概就是胜者树的高度),只需要对这些元素进行比较即可,共比较次数15(胜者树)+ (4-1)=18 次比较。
注:也就是说胜者树在求数组最大值,次大值得时候,有用武之地。
败者树在外排序的k路平衡归并中使用,它是一个完全二叉树,其非叶节点(中间节点)为比较中的败者。根节点为最后一次比较的败者。最终胜利者则被直接输出(或到输出缓冲区)。
败者树的引入是因为:k路平衡归并中,若不使用败者树,则对每次对k路需要比较k-1次得到最值,对于总共n个记录的每一趟归并共需要(n-1)*(k-1)次比较。若有m个归并初始段,归并趟数为logk(m) ,总共比较次数logk(m)*(n-1)*(k-1)。引入败者树(由k个元素构造成败者树)则每次不需要k-1次比较,只需要log2(k)次即可。
本文转自:网易的博客-----鼻子很帅的猪
源网址为:http://blog.163.com/zhaohai_1988/blog/static/20951008520128510538412