- 1、本文档共68页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 查找与排序算法 本章内容 查找 排序 5.1 基本概念和术语 查找表:由同一类型的数据元素构成的集合。 关键字:数据元素中某个数据项的值, 用它可以标识数据元素。 查找:是指在查找表中查找一个其关键字值等于某一给定值的数据元素(或记录)。 平均查找长度:指查找过程中对关键字的平均比较次数。 5.2 线性表的查找 顺序查找 二分查找 索引查找 分块查找 5.2.1 顺序查找 顺序查找的基本思想 从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和给定值K进行比较,比较结果有两种: 相等,则查找成功,返回该元素在表中的位置; 若扫描结束后都不等,则查找失败,返回0值。 5.2.1 顺序查找 顺序查找算法的实现 顺序查找的线性表类型定义: typedef struct { Keytype key; Othertype other; }DataType; 具体算法: int seqsearch(SeqList r[],int n,int x) /*在长度为n的线性表上查找关键字为x的元素*/ { int i; r[0].key=x; /*设置监视哨 r[0].key */ i=n; /*从表尾开始向前扫描*/ while(r[i].key!=x) i--; return i; /*若查找成功,返回元素所在的位置; 若查找失败,则返回0值*/ } 5.2.1 顺序查找 算法分析 假设在每个位置查找的概率相同,即有Pi=1/n,由于扫描是从头到尾的,则有每个位置的查找比较次数Cn=1,Cn-1=2, ……, C1=n, 于是,查找成功的平均查找次数: 5.2.1 顺序查找 顺序查找的优点: 算法简单,对表结构无特殊要求。 顺序查找的缺点: 查找效率较低。 5.2.2 二分查找 二分查找的条件限制:顺序存储及元素有序排列。 5.2.2 二分查找 二分查找的算法实现 int binsearch(SeqList r[],int n,int x) /*在长度为n的升序线性表上查找关键字为x的元素*/ { int low,high,mid; low=1; high=n; /*设置查找区间左、右端点的初值*/ while(low=high) /*当查找区间非空时进行查找*/ { mid=(low+high)/2; /*求出区间中间位置mid的值*/ if(x==r[mid].key) return(mid); /*查找成功时返回元素所在的位置*/ else { if(xr[mid].key) high=mid-1; /*缩小查找区间*/ else low=mid+1; } } return(0); /*查找失败时返回0值*/ } 例: 5.2.2 二分查找 算法分析 二分查找成功的平均查找长度为: 若二叉树为满二叉树,则根据其性质,最大总结点数:n=2h-1 于是,可以得到平均查找长度为: 当n较大时, 5.2.2 二分查找 二分查找的优点: 比较次数较顺序查找要少 查找速度较快 执行效率较高; 二分查找的缺点: 表的存储结构只能为顺序存储; 表中元素必须是有序的。 5.2.3 索引查找 索引查找,又称分级查找。 例如:整个字典就是索引查找的对象,字典的正文是字典的主要部分,称为主表,而音节表、部首表和检字表都是为了方便查找主表而建立的索引,称为索引表。 5.2.3 索引查找 索引查找是在线性表(主表)的索引存储结构上进行的。 索引存储:首先将一个线性表(主表)按照一定的规则分成若干个逻辑上的子表,并为每个子表分别建立一个索引项,由所有这些索引项得到主表的一个索引表,然后可采用顺序或链式的方法来存储索引表和各个子表。 5.2.3 索引查找 索引表的类型定义: struct indexlist { IndexType index; int start; int length; }; 例:设有一个学校部分教师档案表,如表所示: 这四个子表表示成一个索引表: 5.2.3 索引查找 索引查找的算法实现 typedef struct { indextype key; int start; int leng
您可能关注的文档
- 怎样手动安装配置HP LaserJet P3005网络打印机.doc
- 05.字符串及其他数据类型.pdf
- 中世纪西欧庄园会计簿记发展和评述.pdf
- 第十一章 ISD1425拷贝机使用指南.doc
- 如何给电脑做系统教材.doc
- 第8章 继承性及派生类.ppt
- 第3讲_类对象及方法.ppt
- 和钛相关的性质.doc
- 微信企业号怎样使用导入工资明细实现员工自助查询.docx
- 怎样使用虚拟串口工具发送AT命令.pdf
- 新解读《GB_T 33995-2017电子商务交易产品信息描述 家居产品》最新解读.docx
- 新解读《GB_T 33996-2017月球探测数据产品分级与命名》最新解读.docx
- 新解读《GB_T 34005 - 2017管状绝热制品水蒸气透过性能试验方法》最新解读.docx
- 新解读《GB_T 34006 - 2017复合材料用腰果酚改性酚醛树脂》最新解读.docx
- 最新小学生社会实践报告优秀范文(16篇).docx
- 新解读《GB_T 34007 - 2017道路车辆 制动衬片摩擦材料 摩擦性能拖曳试验方法》最新解读.docx
- 新解读《GB_T 34008 - 2017防辐射混凝土》最新解读.docx
- 2025年四级(中级)汽车机械维修工职业技能鉴定《理论知识》真题卷(后附专业解析).pdf
- 新解读《GB_T 34011-2017建筑用绝热制品 外墙外保温系统抗拉脱性能的测定(泡沫块试验)》最新解读.docx
- 新解读《GB_T 34012 - 2017通风系统用空气净化装置》最新解读.docx
文档评论(0)