第四部分 查找和排序技术(new).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四部分 查找和排序技术(new)

2.6 查找与排序;2.6.1 查找的基本概念;2.6.2 静态查找技术;1 顺序查找法;2 有序表的对分查找法;算法程序;3 分块查找;3 分块查找; 二叉排序树的定义 二叉排序树可能为一棵空的二叉树,若非空则必须满足以下特征: (1)根结点左子树中所有结 点的关键字小于根结点的关 键字; (2)根结点右子树中所有结 点的关键字大于或等于根结 点的关键字; (3)根结点的左右子树也都 是二叉排序树。 ; 建立了二叉排序树之后,若查找过程中不插入或删除元素(静态查找),则在二叉排序树中查找方法为: 1)将给定数据key与根结点关键字x进行比较,若key=x则查找成功; 2)若keyx,则与左子树的根结点的关键字值进行比较; 3)若keyx,则与右子树的根结点的关键字值进行比较。 重复上述步骤,直到查找成功;或者一直比较到叶子结点也找不到目标元素,则查找失败。; 可定义二叉排序树结点如下: typedef struct Node { KeyType x; //关键字 struct Node *left, *right; }BinNode; typedef BinNode * BinNodePtr; 二叉排序树查找算法(静态查找)实现: BinNode *search_btree(BinNodePtr p, KeyType key) { while(p!=NULL p-x!=key ) { if( keyp-x ) p=p-left; else p=p-right; } return p; }; 进行动态查找时,查找过程还涉及到插入新结点。其方法为: (1)在二叉排序树中查找数据key(按前一页的方法),若查找成功则程序中止,若查找失败则转入下面插入过程(2) (2)以数据key作为关键字建立新结点,假定查找过程最后到达某叶子结点,比较key与此叶子结点的关键字,若key小于后者则将新结点插入为叶子结点的左孩子,若key大于后者则新结点插入为叶子结点的右孩子。 例:动态查找{10,6,19,22,8,2}; 动态查找过程也是生成二叉排序树的过程。假定由整数序列{10,6,19,22,8,2}生成一棵二叉排序树,可以采用逐个元素插入的方法实现。 (1) 首先将10作为根结点 (2) 然后插入6时,通过比较知610,所以将6作为10的左孩子插入; (3) 同理将19作为10的右孩子插入; (4) 整数22通过和10、19比较后,作为19的右孩子插入。 (5) 依次插入剩余的其他元素 ;二叉排序树动态查找算法实现如下: BinNode* Search_ Insert (BinNodePtr p, KeyType key) { BinNode *pre=NULL; // 循环查找过程 while(p!=NULL p-x!=key ) { pre=p; // pre为结点p的父结点指针 if( keyp-x ) p=p-left; else p=p-right; } // 查找失败,插入新结点 ( 见下一页 ); (接上一页内容) if(p==NULL) { // 建立新结点 p=new BinNode; p-left =NULL; p-right=NULL; p-x=key; //新结点不是根,则作为叶子插入 if(pre!=NULL) { if(pre-x p-x) pre-left=p; //插入为左孩子 else pre-right=p; //插入为右孩子 } } return p; //返回找到的结点或插入的新结点的指针 };2.6.4排序基本概念 ; 内部排序方法有很多类型: 按方法实现特点可分为插入排序、选择排序、交换排序、归并排序等等; 按方法效率可分为简单的排序法、先进的排序法等等。 简单的排序法包括插入排序、选择排序、冒泡排序等,它们的时间复杂度为O(n2)。 而先进的排序法包括快速排序、归并排序等,它们的时间复杂度大约为O(nlog2n)。 ;1、直接插入排序 将记录分为有序和无序两个序列,假定当插入第k个记录时,前面的R1,R2,…,Rk-1已经排好序,而后面的Rk,Rk+1,…,Rn仍然无序。 这时用Rk的关键字与Rk-1的关键字进行比较,若Rk小于Rk-1则将Rk-1向后移动一个单元; 再用Rk与Rk-2

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档