计算机软件基础(自考本科)(1.12).ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机 软件基础 第二篇 数据结构基础 第十二章 常用的查找方法 一、设监视哨的顺序查找 1. 查找思路 将n个数据存入一维数组的A[1…n]区域中;A[0]作为监视哨,存放要查找的给定值K。整个查找过程从最后一个数据A[n]开始,向前依次与K比较,直至A[1]。结论:如果与K都不相等,则查找失败,返回0;否则,查找成功,返回数据的下标位置。 一、设监视哨的顺序查找 2. 算法流程 A[0]=K 开始 N Y Y N i=n A[i]=K? i=0? 没找到返回0 结束 找到返回i i-- 一、设监视哨的顺序查找 3. 程序示例 #define N 6 int seqfind(int x[],int k) { int i=N; x[0]=k; while(x[i]!=k) i--; if(i==0) return(0); else return(i); } main() { int a[N+1],i,functionV,k; for(i=1;i=N;i++) scanf(%d,a[i]); scanf(%d,k); functionV=seqfind(a,k); printf(%d\n,functionV); } 二、折半查找 1. 实施折半查找先决条件 (1)待查数据必须顺序存储; (2)待查数据按升序或降序排列。 二、折半查找 2. 折半查找的思路 将要查找的数据和“中间位置”数据进行比较, 如果相等,则查找成功;如果小于“中间位置”数据, 则在前半部分按上述方法进行查找;否则,在后半 部分按上述方法进行查找。 二、折半查找 3. 算法流程 Y 开始 low=1,high=n low≤high 结束 k=mid? high=mid-1 low=mid+1 查找成功返回mid 查找失败 N 大于 小于 等于 二、折半查找 3. 程序示例 #define N 7 int halffind(int x[],int k) { int low=1,high=N,mid; while(low=high) { mid=(low+high)/2; if(k==x[mid]) return(mid); else if(kx[mid]) high=mid-1; else (kx[mid]) low=mid+1; } return(0); } main() { int a[N],i,functionV,k; for(i=1;i=N;i++) scanf(%d,a[i]); scanf(%d,k); functionV=halffind(a,k); printf(%d\n,functionV); } 三、折半查找判定树 1. 折半查找判定树:用来描述折半查找过程的判定树。 2. 折半查找判定树特点: (1)树中每个节点对应待查序列中的一个数据; (2)节点值为所对应数据的下标序号; (3)根节点是待查序列中间数据的下标位置序号mid; (4)左子树为mid位置左边节点的下标位置序号; (5)右子树为mid位置右边节点的下标位置序号; 三、折半查找判定树 例:求待查数据序列为2、5、9、13、18、26、32的 折半查找判定树。 解: 7 6 5 4 3 2 1 位置序号 32 26 18 13 9 5 2 数据序列 折半查找判定树为: 4 2 6 1 3 5 7 三、折半查找判定树 3. 折半查找判定树的意义: (1)待查节点在判定树中的层数为该节点折半查找 成功的比较次数; (2)折半查找的过程恰好走了一条从根节点到被查 节点的路径。查找过程中进行比较的节点为该路径上 的所有节点; (3)假设每个数据查找的概率相等,则折半查找成 功的平均查找次数为: (4)不成功的查找次数不超过树的高度。 三、折半查找判定树 例1:(2010.4)对100个有序数据,若采用二分法查 找某一个元素,比较次数最多的是( )。 A. 6 B. 7 C. 8 D. 100 例2:(2009.4)已知一个有序表{1,4,9,13,32,41,54,62, 75,77,87,95,100},用折半法查找关键字值15时,查找 不成功的比较次数是——————————。 知识点:1)待查节点在判定树中的层数为该节点折半查找成功的比较数; 2)不成功的查找次数不超过树的高度。 关键点:构建折半查找判定树。 四、二叉排序树上的查找

文档评论(0)

wxc6688 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档