- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
查找和排序课件
查找和排序 西安交通大学计教中心 ctec.xjtu.edu.cn 查找基本概念 查找表: 由同一类数据构成的用于查找的集合被称作查找表。 查找表是具有一定存储结构的数据集合,比如顺序表结构、链式结构、树形结构等。 查找往往根据数据元素的某个属性进行。例如根据学号查找某个学生记录。这种被用于查找的元素属性一般称为关键字,它往往可以唯一标识一个元素。 静态查找表: 查找表一旦建立,在以后的查找过程中就不会改变。它所对应的查找算法属于静态查找技术。 动态查找表:查找表建立后,在后来的查找过程中仍会改变查找表的内容。它所对应的查找算法属于动态查找技术。 动态查找的例子——词汇统计问题。就是统计一篇文章中使用了多少词汇以及每个词汇的使用次数。 解决方法是先建立一个空的查找表,以后每读到一个词就在查找表中查询一下,如果该词汇存在则将其使用次数加一,否则将新词插入到查找表中并设使用次数为一次。显然,这个查找表是不断扩张的。 静态查找技术 顺序查找 折半查找 查找表的数据结构 假设静态顺序查找表的存储结构为: struct SSTable{ ElemType *data; //存储空间地址 int length; //表的长度 }; 顺序查找表的元素存放在data[0]至data[length-1]中。 1.顺序查找 顺序查找的方法是从表的一端开始,逐一比较给定的数据key和表中数据元素的关键字x的值,若两个数据一致则查找成功,同时给出该数据元素在表中的位置,否则查找失败。 顺序查找算法C++语言描述如下: int SqSearch(SSTable L, KeyType key) { int k = 0; while(kL.lengthL.data[k].x!=key) k++; if (kL.length) return k+1; //返回数据元素位置 else return 0; } 该算法若查找成功,则函数返回值为目标元素在表中的位置,否则返回0。这里元素位置从1开始算起。 顺序查找的主程序实现1 typedef struct NODE { int x; int y; }ElemType; typedef int KeyType; 顺序查找的主程序实现2 #includeiostream.h void main() { SSTable mtable; ElemType table[100]; mtable.length =100; mtable.data =table; 顺序查找的主程序实现3 int j=1; for(int i=0;i100;i++) { table[i].x =10+i; table[i].y =18+i; couttable[i].x\t; if(j==10) {coutendl;j=0;} j++; } coutSqSearch(mtable, 19)endl; } 在上述算法中为了避免“出界”,需在循环中作kL.length 的判断,这使算法的执行时间几乎增加一倍。为提高效率,对查找表的结构改动如下: 适当设置数组长度,将元素存于data[1]至data[length-1]中,在0号单元预存待查找数据key作为监视哨。改写查找过程为从后往前查找。 因为循环查找过程至少会在0号单元停止,这样就不必在每一次循环中都判别是否数组出界。 改进的顺序查找算法C++语言描述如下: int SqSearch(SSTable L, KeyType key) { L.data[0].x= key; //监视哨 int k = L.length; while(L.data[k].x!=key) k=k-1; //从后往前找 return k; //找不到时,k为0 } 该算法若查找成功,则函数返回值为目标元素在表中的位置,否则返回0。 2.折半查找(也称二分查找 ) 顺序查找表的查找算法简单,但平均查找长度较大。如果顺序查找表的元素按照关键字的值有序存放,那么可利用高效的折半查找来完成查询。 假定元素按关键字的值升序排列,折半查找的思路是将给定的数据与有序表中间位置的元素做比较,若两者相等则查找成功;若前者小于后者则在中间位置左边的元素中继续查找;若前者大于后者则在中间位置右边的元素中继续查找。不断重复这一过程直到查找成功,或者直到查找区间缩小为一个元素时却仍未找到目标,则查找失败。 折半查找算法的C++语言描述如下: int BinSearch( S
您可能关注的文档
最近下载
- 家政讲师师资培训课件.ppt
- 细菌群体感应信号分子及其检测方法.docx VIP
- 【基于企业作业成本法的企业成本控制研究的国内外文献综述4000字】.docx VIP
- 2025年中级注册安全工程师之安全生产技术基础题库(考试直接用).docx VIP
- 10.2捍卫国家利益课件.pptx VIP
- 2025年中级注册安全工程师之安全生产技术基础题库及参考答案【考试直接用】.docx VIP
- 人教版物理九年级上册《第十六章 电压 电阻》大单元整体教学设计.docx
- 中文书名《我的姐姐罗莎琳·富兰克林》.doc VIP
- 2025年中级注册安全工程师之安全生产技术基础考试题库附参考答案【考试直接用】.docx VIP
- 【MOOC期末】《中国马克思主义与当代》(北京科技大学)期末慕课答案.docx VIP
文档评论(0)