第16章搜索与排序-Read.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第16章搜索与排序-Read.ppt

第16章 搜索与排序 搜索与排序是计算机程序设计中经常会遇到的一类实际问题。搜索一词,简单来说就是从一堆事物中找出需要的东西。对计算机而言,这堆事物就是计算机要处理的数据。而排序就是将一堆物品按照一定的规则排列起来。一般来说,搜索的目的往往就是为了排序。本节将介绍程序设计中会用到的一些常见搜索和排序算法。 16.1 搜索算法 搜索是为了从一堆数据中找出符合要求的数据,计算机能够按照人们的要求不知疲倦的去搜索符合的数据。常见的搜索算法包括简单的顺序搜索、二分搜索及散列搜索。 16.1.1 顺序搜索 顺序搜索是最简单的一种搜索算法,简单来说,就是将数据依次拿出来查找看是否有符合要求的结果。例如对于一组数据(n1,n2,n3,…,nn),想要确定其中是否有数据m,则顺序搜索的做法如下: 先看第一个数据n1,如果n1=m则找到了所要找的数据,否则继续搜索; 接着看第二个数据n2,如果n2=m则找到了所要找的数据,否则继续搜索; ……; 来看最后一个数据nn,如果nn=m则找到了要找的数据,否则打印没有搜索到合适的数据。 16.1.2 二分搜索 顺序搜索思路简单,但效率不高。二分法是一种常见的高效、通用的搜索算法,但是必须配合排序好的数据才能正常的使用。如果将要搜索的数据使用数组进行保存并按照从小到大的顺序进行排列,则二分法的基本步骤如下: 取数组的中间值M与要搜索的数据G对比,如果M=G则完成了搜索。如果MG,在数据进行了排序的情况下,则要搜索的数据G一定在数组的下半部分;如果MG,则要搜索的数据G一定在数组的上半部分。 根据数据G在数组中的位置来重新分组,重复执行前一步继续进行寻找。如果重新分组已经执行到不能再继续下去,此时还没有找到要搜索的数据G,则表示在搜索的数据中不存在要寻找的数据。 16.1.3 散列搜索 散列搜索是一种相当高效的搜索算法,在使用恰当的情况下,几乎只需要做一次对比操作就能判断某一个数据是否在一组目标数据中。 散列搜索的主要精力放在了如何将数据放置在内存中。当数据在内存中排列好之后,搜索数据只需要计算它可能出现在内存中的具体位置并与该位置的实际数据进行对比即可。散列搜索没有现成的计算公式可供使用,基本的思想就是一个内存位置对应一个具体数据,并且两者之间存在某种联系。 16.2 排序算法 排序的目的就是为了将数据以某种特定的形式排列起来,以方便某种应用。排序的算法较多,这里只介绍几种较为常见且有效的算法。 16.2.1 冒泡法 冒泡法是最简单的一种排序方法。尽管该方法的思想较为简单,但实际的排序效率较低。如果有N个数据需要进行排序,则需要对数据作N-1次扫描工作。 冒泡法的基本步骤如下: 从第一个数字开始,依次比较相邻两个数据的大小。如果第一个数比第二个数大,则交换两者的位置; 重复上述工作,直到倒数第二个数据; 从第一步开始,重新进行新的扫描。 在上面的算法中,由于每次扫描都将剩余数据中的最大值放到了最后边,因此每次扫描的数据会越来越少,最后形成的新数据排列是按从小到大的方式进行的。这就好像水里的气泡,越轻的越在上面。当然,上面的排序结果也可以反过来,从大到小进行排列也是可以的。 16.2.2 选择排序法 选择排序法在某种形式上与冒泡法较为相似,冒泡法如果找到两个数中较大的一个就将其放到第二个数字的位置;而选择排序法则会将一组数据中的第一个数字与其后所有的数据进行比较,如果这个数字较小则将其放置于这组数据的第一个位置上。 对于一个有N个数字的一组数组,选择排序法的基本步骤如下: 找出N个数据中最大或最小的一个,并将其与这组数据中的第一个数字交换位置; 找出剩余N-1个数据中最大或最小的一个,并将其与这组数据中的第二个数字交换位置; 找出剩余N-2个数据中最大或最小的一个,并将其与这组数据中的第三个数字交换位置; ……; 找出最后两个数据中最大或最小的一个,并将其与这组数据中倒数第二个数字交换位置。 16.2.3 快速排序法 快速排序法名如其人,一般来说,快速排序法是目前最快的排序方法。对于一个有N个数据的序列而言,快速排序的基本步骤如下: 以序列中的第一个数字作为键值K,并令L=2、R=N; 以K为基准,将小于K的数字往前移,大于K的数字往后移。移动完成后,自然会发现K在原始序列中的大小排名,这时将K放置于正确的位置上; 如果K的大小排名为M,则移动后的序列会分成大于K和小于K的两组。此时,再将这两组数字按上述方法继续进行排序。 在快速排序法的第二步中,可以进一步详细的进行说明: 从序列中的第二个数字开始,依次拿下一个数字与键值K比较,直到找到大于等于K的数值L为止。此时,将L重新设置为数值L在序列中的位置; 从序列中的倒数第二个数字开始,依次拿钱一个数字与键值K比较,直到找到小于等于K的

文档评论(0)

wendang_12 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档