- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 人民版劳动教育四年级上册全册教学课件.ppt
- 三年级上册道德与法治课件-第一单-快乐学习-单元梳理-部编版(共28张PPT).pptx VIP
- 蛋白质工程蛋白质设计课件.ppt VIP
- Haier海尔洗衣机XQB100-M21JDB使用说明书手册参数图解图示pdf电子版下载.pdf VIP
- 提高住院患者大小便标本送检率PDCA.pptx VIP
- 2025年建设应急避难广场的可行性研究分析报告.docx
- 2025年扬中锂电铜箔项目可行性研究报告.docx
- 2025年中国注射用环磷腺苷项目创业计划书.docx
- 2025年可行性研究报告怎么写3.docx
- 2022年江苏省安全员C1证(机械安全员)考试题库大全(含答案).docx VIP
文档评论(0)