选择排序(二)--树形选择排序

利用满二叉树的性质,思想:将输入的数据存放到满二叉树的叶节点,通过比较树中剩余可用节点(从底层的叶节点开始)的大小,每次选择最小的数值(比较复制到二叉树的顶端),并且把最小数值赋给排序数组的前端,把最小数值原来叶节点的位置设置为不可用;依次循环直至最后一个可用叶节点。

一、满二叉树和完全二叉树区别如图:

未命名6
二、程序讲解:

template
class TreeNode{
public:
    T data;
    int index;
    int active;
    TreeNode & operator=(TreeNode & treenode)
    {
        this->data=treenode.data;
        this->index=treenode.index;
        this->active=treenode.active;
        return *this;
    }
};
树节点数据结构包括了data数值,index用来存放该数值在叶节点存放的位置(所有数据开始都是存放在叶节点),active表示激活没有,最后如果该数据移植树根部,则将active字段置0无效。

 

具体的程序每次交换的输出如下,

输入数据时:1541,54, 89,345  , 416,1

#表示叶节点处无效的位置,

一次排序后参加排序(有效的)的数据移到最顶端(树根)

未命名6

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值