- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章查找技术在条记录中查找其中一条记录分析可能的算法用数组实现顺序查找折半查找分块查找比较各个算法的特点分析可能的算法用链表实现调试与优化代码完善程序观察程序结果基本概念查找是指从一组记录集合中找出满足给定条件的记录查找表在讨论查找时通常假设被查找的对象是由一组同一类型的记录构成的集合称这个集合为查找表关键字是指记录的某个数据项用它可以标识一个记录若此关键字可以唯一地标识一个记录则称此关键字为主关键字反之把可以识别若干记录的关键字称为次关键字查找是指根据某个给定的值在查找表中查找一个其关键字值等
第7章 查找技术 在10000条记录中查找其中一条记录 1 .分析可能的算法,用数组实现 ①顺序查找 ②折半查找 ③分块查找 2 .比较各个算法的特点 3 .分析可能的算法,用链表实现 4.调试与优化代码,完善程序,观察程序结果 5.1 基本概念 查找是指从一组记录集合中找出满足给定条件的记录。 查找表 在讨论查找时,通常假设被查找的对象是由一组同一类型的记录构成的集合,称这个集合为查找表。 关键字 是指记录的某个数据项,用它可以标识一个记录。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字;反之,把可以识别若干记录的关键字称为次关键字。 查找 是指根据某个给定的值,在查找表中查找一个其关键字值等于给定值的记录。若表中存在这样的一个记录,则称查找成功;若表中不存在关键字值等于给定值的记录,则称查找失败。 在查找一个记录时所做的主要操作是关键字的比较,所以通常把查找过程中对关键字的平均比较次数作为衡量一个查找算法效率优劣的标准,并称平均比较次数为平均查找长度(Average Search Length)。平均查找长度的定义为: ASL= 其中,n为元素的个数; ci是查找第i 个记录需进行的比较次数;pi是查找第i个记录的概率,一般可认为查找每个记录的概率是相等的,即p1=p2=…=pn=1/n。 5.2 线性表的查找 线性表的查找主要有顺序查找、折半查找和分块查找三种方法。为简便起见,假设查找表中的记录为整型,记录的关键字即为该整数,记录的个数为N,存放在数组R中。 查找表的C语言定义如下: #define N 100 int R[N+1]; 5.2.1 顺序查找 基本思想:从查找表的一端开始,逐个将记录的关键字值和给定值进行比较,如果某个记录的关键字值和给定值相等,则称查找成功;否则,说明查找表中不存在关键字值为给定值的记录,则称查找失败。 ※顺序查找算法如下: int seqsearch (int R[],int k) /*在查找表R中查找关键字为k的记录,查找成功,返回记录在R中的下标值,否则返回0*/ { int i; R[0] =k; /*将k放入R[0]中*/ i=N; /*从最后一个元素开始查找*/ while (R[i]!=k) /*R[0]用来控制循环退出,起“监视哨”的作用*/ i--; return (i); /*若i为0,表示查找失败,否则R[i]为要找的记录*/ } ※顺序查找算法性能分析: 在顺序查找中,比较次数ci取决于所查记录在表中的位置。如查找记录R[n]时,仅需比较一次,而查找记录R[1]时,则需比较n次。一般来说,查找第i个记录的比较次数为ci=n-i+1,因此,查找成功的平均查找长度为: ASL成功=pi×ci =pi×(n-i+1) 在等概率情况下,即pi=1/n时,查找成功的平均查找长度为(n+1)/2。若关键字不在表中,则必须经过n+1次比较后才能确定查找失败。所以查找失败的平均查找长度为n+1。这个结果表明:顺序查找的查找长度是与记录的个数n成正比的。 已知含有10个整数的查找表如下:(9,13,15,7,45,32,56,89,60,36),从键盘上输入一个整数,用顺序查找的方法在查找表中查找该整数。若存在,输出该元素的下标值,否则,给出相应的信息。 程序如下: 5.2.2 折半查找(二分查找) 使用折半查找必须具备两个前提条件: (1)要求查找表中的记录按关键字有序 (2)只能适用于顺序存储结构 基本思想: 先取查找表的中间位置的关键字值与给定关键字值作比较,若它们的值相等,则查找成功;如果给定值比该记录的关键字值大,说明要查找的记录一定在查找表的后半部分,则在查找表的后半部分继续使用折半查找;若给定值比该记录的关键字值小,说明要查找的记录一定在查找表的前半部分,则在查找表的前半部分继续使用折半查找。…直到查找成功,或者直到确定查找表中没有待查找的记录为止,即查找失败。 设有一个11个记录的有序表的关键字值如下: 8 12 26 37 45 56 64
文档评论(0)