C++代码,数据结构-外部排序-败者树

本文探讨了败者树在外部排序中的应用。败者树是一种优化树形选择排序的方法,用于外部排序过程中。虽然网上难以找到关于为何选择败者树而非胜者树的原因,但败者树在树的构建和调整中可能更适应外部排序的需求。建议通过图表辅助理解败者树的建立过程。
摘要由CSDN通过智能技术生成

败者树是树形选择排序的一种变型,它的每个非终端结点表示左右孩子中的败者,至于为什么要使用败者树,而不是胜者树,这个问题我在网上也没有寻找到答案,可能在建立树的调整树的时候败者树更加符合外部排序的要求吧,

 注:建立败者树的过程,,这个最好用图画出来比较好理解,

#include<iostream>
using namespace std;
#define k 5

typedef  int Losertree[k];
struct exnode{
int key;
};

typedef exnode External[k+1];//存放带归并段的关键字,


void Adjust(Losertree &ls,int s,External &b){
int t=(s+k)/2; //t为 b[s]的双亲结点,这个可以画图理解
while(t>0){
    if(b[s].key>b[ls[t]].key){//s指向新的胜者,而ls[t]指向败者
        int tem=s;
        s=ls[t];
        ls[t]=tem;

    }
    t/=2;//向上继续比较

}

ls[0]=s;//记录下最后的胜者

}

void Create_losertree(Losertree &ls,External &b){
for(int i=0;i!=k;++i){//设置ls败者的初值都为k, k位置的关键字已经设置为了-1, 
    ls[i]=k;
}
for(int i=0;i!=k;++i){//一次从存储点第一个关键词开始进行调整
    Adjust(ls,i,b);
}
}







v
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值