基于平衡二叉树的排序算法分析与设计

基于平衡二叉树的排序算法分析与设计摘要:本文根据平衡二叉树的构造原理,提出了利用平衡二叉树进行内部排序的思想,据此完成了对应的算法设计,并通过典型实例进行•验证和效率分析。关键词:平衡二叉树内部排序AnalysisandDesignforTnternalSortAlgorithmBasedonAVLtreeZOUYong-linTANGXiao-yang(schoolofcomputerscienceandengineering,ChangshuInstituteofTechnology,215500)AbstractAccordingtotheprincipleofAVLtreeconstructing,theidealofsortingbyusingtheAVLtreewasdevelopedandthealgorithmwasdesignedandimplementedinthispaper・Finally,thecorrectnessandtheefficiencyforthisalgorithmwerevalidatedandanalysedthroughtheexainple・KeywordsAVLtree,internalsort【中图分类号】G6421.引言在数据结构课程教学的理论和实践中,有关内部排序的常用方法,一般将它们分为五大类[3]:插入、交换、选择、归并和基数排序;并且,大多采用顺序表或链表(队)结构讨论各种算法的具体实现过程。实际上,并不是所有的内部排序算法都必须使用线性表对应的存储结构來描述。不妨换一种思路,二叉排序树(BST树)和平衡二叉树(AVL树)作为动态查找表结构,它们具有一个基本特点,就是进行中序遍历可以得到一个按结点关键字值递增有序的序列;并且对于平衡二叉树而言,进行一次中序遍历的过程,其时间复杂度为0(log2n)。因此,利用构造平衡二叉树的方法,同样可以实现对一个无序序列进行排序的目的。2.构造平衡二叉树的基本过程由平衡二叉树的原理可知,将一个无序序列构造成一棵平衡二叉树时,为了确保其平均查找长度与树的深度相当,在每次插入一个新结点时,需要判断是否失去平衡,从而决定是否需耍进行平衡处理以及如何进行平衡处理。如果一棵平衡二叉树,由于插入一个新结点导致失去平衡,则重新恢复平衡的调整方法有4种,分别是:单向右旋、单向左旋、先左后右和先右后左。具体过程是:首先找到最小不平衡子树,根据其根的平衡因子的值和对应的形态,选择采用不同的方法来恢复其平衡性。3.算法设计根据上述原理,可选择二叉链表存储结构,设计构造平衡二叉树的算法。为了实现待排序关键字中可能存在重复关键字的情形,可对平衡二叉树的定义稍作修改,允许在平衡二叉树中存在值相同的结点;同时,为了确保其稳定性,约定将后续的值相同的关键字以其右子树中的新结点插入。算法主要代码如下:#defineLH1//左高#defineEli0//等高#defineRH-1//右高#defineNum20#definetrue1#definefalse0inttaller;typedefstructBSTnode//平衡二叉树的结点结构{intdata;//关键字intbf;//平衡因子structBSTnode*lc,*tc;//左右指针}BSTnode;intInsrtAVL(BSTnode*T,BSTnode*newNode,BSTnode**Tr,inttaller){//在平衡二叉树中插入一个新元素if(newNode->datadala)//在T的左子树中搜索插入if(T-〉lc二二NULL)//T的左子树为空树,直接插入taller=true;T->lc=newNode;}else//非空,找到插入点再插入InsrtAVL(T->lc,newNode,&(T-〉lc),taller);if(taller)//判断平衡性switch(T->bf){caseLH://进彳亍左平衡处理LeftBalance(T,Tr);taller二false;break;caseEH:T->bf=LII;taller二true;break;caseRH:T->bf=EH;taller二false;break;}}else//在T的右子树中搜索插入{if(T->rc==NULL)//T的右子树为空树,直接插入taller=true;T->rc=newNode;else//非空,找到插入点再插入InsrtAVL(T->rc,newNode,&(T->rc),taller);if(taller)//判断平衡性switch(T->bf)//左平衡处理IcaseLil:T->bf二EH;taller=false;break;caseEli:T->bf二RH;taller二true;break;caseRH://进彳亍右平衡处理RightBalance(T,Tr);taller二false;break;1JIJreturn1;}voidLefLBalance(BSTnode*T,BSTnode**Tr)[BSTnode*Bnode,*Cnode;Bnode=T->lc;switch(Bnode->bf)caseLH://单向右旋T-'bf*二Bnode~>b仁EH;RRotate(T,Tr);break;caseRH:Cnode=Bnode->rc;switch(Cnode~>bf)icaseLII:T->bf二RH;B_node->bf二EH;break;caseEli:T->b仁Bnode~>b仁EH;break;caseRH:T->bf二Eli;B^node->bf=LII;break...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?