- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
首都师范大基础教育研究丛书19
查找和排序 ;查找基本概念 ; 静态查找表: 查找表一旦建立,在以后的查找过程中就不会改变。它所对应的查找算法属于静态查找技术。
动态查找表:查找表建立后,在后来的查找过程中仍会改变查找表的内容。它所对应的查找算法属于动态查找技术。
动态查找的例子——词汇统计问题。就是统计一篇文章中使用了多少词汇以及每个词汇的使用次数。 解决方法是先建立一个空的查找表,以后每读到一个词就在查找表中查询一下,如果该词汇存在则将其使用次数加一,否则将新词插入到查找表中并设使用次数为一次。显然,这个查找表是不断扩张的。 ;平均查找长度:
为了确定数据元素在查找表中的位置,需要将给定值和表中的数据元素的关键字进行比较的次数的期望值。平均查找长度ASL的计算方法为: ;静态查找技术;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开始算起。; 在上述算法中为了避免“出界”,需在循环中作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。; 下面分析一下改进的顺序查找算法的时间性能。对于改进的顺序查找而言,找到第i个元素的比较次数Ci = n-i+1,所以在等概率查找的情况下,顺序表查找的平均查找长度为:; 2.折半查找(也称二分查找 )
顺序查找表的查找算法简单,但平均查找长度较大。如果顺序查找表的元素按照关键字的值有序存放,那么可利用高效的折半查找来完成查询。
假定元素按关键字的值升序排列,折半查找的思路是将给定的数据与有序表中间位置的元素做比较,若两者相等则查找成功;若前者小于后者则在中间位置左边的元素中继续查找;若前者大于后者则在中间位置右边的元素中继续查找。不断重复这一过程直到查找成功,或者直到查找区间缩小为一个元素时却仍未找到目标,则查找失败。 ;折半查找算法的步骤描述如下:
① 设置查找区间初值,设下界low = 0,设上界high = length-1。
② 若low≤high则计算中间位置mid = (low +high)/2。
③ 若keydata[mid],则设high = mid-1并继续执行步骤②;
若keydata[mid],则设low = mid+1并继续执行步骤②;
若key=data[mid]则查找成功,返回目标元素位置mid+1(位置从1计数)。
④ 若当low=high时,key!=data[mid]则查找失败,返回0。 ;折半查找算法的C++语言描述如下:
int BinSearch( SSTable L, KeyType key )
{ int low, high, mid;
low = 0;
high = L.length-1; //设置查找区间初值
while (low = high) {
mid = (low + high) / 2;
if(key==L.data[mid].x) return mid+1; //查找成功
else if( keyL.data[mid].x )
high = mid-1; //继续在前半区间进行查找
else
low = m
您可能关注的文档
- 风湿病实室检查解读.ppt
- 风湿病总大课ls.ppt
- 风湿病特征诊断基础.ppt
- 风湿病的液学改变.ppt
- 风电机组工技术修改版.ppt
- 风电场运管理现状与对策.ppt
- 风湿病引眼部疾病.ppt
- 风火格力品牌合营销提案.ppt
- 风采中学乐科36.ppt
- 风险管理再保险业经营.ppt
- 湖北省荆州市沙市中学2025-2026学年高一上学期12月月考语文试题.docx
- 吉林省长春市第二实验中学2025-2026学年高二上学期11月期中考试数学含解析.docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测政治.docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测政治答案.docx
- 物理试卷(A卷)答案山西省三重教育2025-2026学年高二12月阶段性检测(12.17-12.18).docx
- 物理试卷(A卷)山西省三重教育2025-2026学年高二12月阶段性检测(12.17-12.18).docx
- Unit1Reading2课件牛津译林版七年级英语下册.pptx
- 物理试卷(A卷)答案浙江省2025学年第一学期浙江北斗星盟高二年级12月阶段性联考(12.18-12.19).docx
- 四川省字节精准教育联盟2026届高中毕业班第一次诊断性检测语文.docx
- Unit1MynamesGina第3课时考点讲解writing16张.pptx
原创力文档


文档评论(0)