- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七讲 查找与排序算法 参考书:《计算机程序设计基础》第十章 《数据结构(C语言版)》第九章 本讲主要内容 排序算法 直接插入排序 简单选择排序 起泡法排序 查找算法 顺序查找 折半查找 排序 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。 数据元素:数据的基本单位。在计算机中通常作为一个整体进行考虑。一个数据元素可由若干数据项组成。 关键字:数据元素中某个数据项的值,用它可以标识(识别)一个数据元素。 内部排序与外部排序 内部排序:待排序的数据元素存放在计算机内存中进行的排序过程。 外部排序:待排序的数据元素数量很大,以致内存存中一次不能容纳全部数据,在排序过程中尚需对外存进行访问的排序过程。 内部排序方法 插入排序 将一个待排序序列的元素,逐个按其关键字的大小插入到前面已排好的有序序列的适当位置上,直到待排序元素全部插入完为止。 选择排序 每次从待排序序列中选择一个关键字最小的元素,(当需要按关键字升序排列时),顺序排在已排序序列的最后,直至全部排完。 交换排序 两两比较待排序序列中的元素,并交换不满足顺序要求的各对记录,直到全部满足顺序要求为止。 直接插入排序 简单选择排序 在选择类排序方法中,从待排序序列中选择元素的方法不同,又分为不同的选择排序方法,其中最简单的是:简单选择排序。下面举例说明: 起泡排序 最简单的交换排序方法——起泡排序 对具有n个元素的序列按升序进行起泡排序的步骤: 首先将第一个元素与第二个元素进行比较,若为逆序,则将两元素交换。然后比较第二、第三个元素,依次类推,直到第n-1和第n个元素进行了比较和交换。此过程称为第一趟起泡排序。经过第一趟,最大的元素便被交换到第n个位置。 对前n-1个元素进行第二趟起泡排序,将其中最大元素交换到第n-1个位置。 如此继续,直到某一趟排序未发生任何交换时,排序完毕。对n个元素的序列,起泡排序最多需要进行n-1趟。 起泡排序举例 对整数序列 8 5 2 4 3 按升序排序 查找 查找 所谓查找,就是在一个数据元素的集合中,按照某种方式找出所需要的特定数据元素的过程。 两种最简单的查找方法: 顺序查找从数据序列第一个元素开始,将给定值逐个与各元素的关键值比较,直到找到相等者。若找不到相等者,便是查找不成功。 折半查找(二分法查找)对于已按关键字排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。 折半查找举例 查找与排序算法综合应用举例 题目:使用前面介绍的三种排序、两种查找算法,对若干人的姓名(字符串)进行排序和查找。 编程要点: 查找、排序算法如前所述 对若干字符串进行排序,为避免大量的数据交换,应使用指针数组,存放每个字符串的首地址,当排序过程中需要交换两字符串时,只交换对应的指针数组元素即可。 字符串比较可以使用函数 strcmp() 程序:7-1.c * C语言程序设计 清华大学 郑莉 安颖莲 在插入类排序方法中,因寻找插入位置的方法不同,又分为不同的插入排序方法,其中最简单的是:直接插入排序。下面举例说明: 初始状态: [5] 4 10 20 12 3 插入操作: 1 [4] [4 5] 10 20 12 3 2 [10] [4 5 10] 20 12 3 3 [20] [4 5 10 20] 12 3 4 [12] [4 5 10 12 20] 3 5 [3] [3 4 5 10 12 20] [5 4 10 20 12 3] 初始状态: 3 [4 10 20 12 5] 3 4 [10 20 12 5] 第 i 次选择后,将选出的那个记录与第 i 个记录做交换。 3 4 5 [20 12 10] ... ... 8 5 2 4 3 5 2 4 3 8 2 4 3 5 8 2 3 4 5 8 2 3 4 5 8 初始状态 第一趟结果 第二趟结果 第三趟结果 第四趟结果 小的逐渐上升 每趟沉下一个最大的 用折半查找法,在下列序列中查找值为21的元素: L=1 5 13 19 21 37 56 64 75 80 88 92 H=11 M =INT((L+H)/2)=6 5 13 19 21 37 L=1 H=
文档评论(0)