排序和二叉排序树.docVIP

  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文档。上传文档
查看更多
排序和二叉排序树

第三讲 排序与二叉排序树 第六章 排序与排序二叉树 118 6.1排序的基本概念 118 6.2插入排序 119 6.2.1直接插入排序 119 6.2.2折半插入排序 120 6.2.3表插入排序 121 6.2.4希尔排序(Shell’s Sort) 123 6.3 交换排序 125 6.3.1冒泡排序(Bubble Sort) 125 6.3.2快速排序 127 6.4选择排序 131 6.4.1 简单选择排序 131 6.4.2树形选择排序 133 6.4.3 堆排序(Heap Sort) 134 6.5二路归并排序 136 6.6几种线性时间排序算法 138 6.6.1计数排序(Count Sort) 138 6.6.2基数排序(Radix Sort) 140 6.6.3桶排序(Bin Sort) 141 6.7外排序 142 6.8二叉排序树 143 6.8.1二叉排序树的定义 143 6.8.2二叉排序树的特点 144 6.8.3二叉排序树上的查找 144 6.8.3平衡二叉树 145 6.8.4二叉排序树上的运算 146 习题 148 第六章 排序与排序二叉树 【重点与难点】 理解各种排序的算法,并能通过完整的程序实现; 不同类型、不同数据量对排序方法的选择; 掌握堆的建立及堆排序的实现; 掌握排序二叉树的相关操作及应用。 【引入】 在进行查找或数据处理时,经常希望数据是有序的,要将一些无序的数据变为有序的数据就要用过排序的算法。 为了查找的方便,经常会构造排序二叉树这种数据结构。 6.1排序的基本概念 如果要将一类无序的数据分类成有序的数据,这种算法称为排序(Sorting),有时又叫分类。它的任务是把一组可能是零乱的数据按照规定的次序重新排列。这里所说的某种规定的次序是指某个排列规则,一般要用到递增(非减)或递减(非增)顺序。一般来说排序的目的是为了以后能对这些数据进行检索。排序是程序设计中频繁使用的一种算法,当数据量比较少时选择什么算法来排序没有多少关系,当数据量比较大时就要选择合适的方法了。 排序是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列。作为排序依据的数据项称为“排序码”,也即数据元素的关键码。为了便于查找,通常希望计算机中的数据表是按关键码有序的。如有序表的折半查找,查找效率较高。还有二叉排序树、B-树和B+树的构造过程就是一个排序过程。若关键码是主关键码,则对于任意待排序序列,经排序后得到的结果是唯一的;若关键码是次关键码,排序结果可能不唯一,这是因为具有相同关键码的数据元素,这些元素在排序结果中,它们之间的位置关系与排序前不能保持一致。 若对任意的数据元素序列,使用某个排序方法,对它按关键码进行排序:若相同关键码元素间的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;而不能保持一致的排序方法则称为不稳定的。 排序的方法通常分为两大类:内部排序和外部排序。内部排序是指将要排序的对象存放于计算机的内部----高速、随机存取的内存之中;而外部排序是将大量的被分类(排序)的对象存放于存储容量大得多的外存如磁盘中,每次仅有一部分数据对象调入内存,并在一个瞬时仅能处理其中一个对象。由于内部排序要用到数组这一构造类型数据结构以存放排序前后的数据,因此有时又将内部排序称为数组排序。而外部排序用到文件这一构造型数据结构,有时又将其称为文件排序。 内部排序主要有直接排序和间接排序。直接排序分为选择排序、插入排序、交换排序等较为成熟的方法,间接排序主要是针对直接排序作的一些改进,有shell排序、快速排序、堆排序等成熟算法。此外应用动态数据结构还可以实现拓扑排序等。这里介绍几种典型的算法,为了方便上机调试通过,所有的数据假设都是随机产生的整数,且都是按照由大到小的顺序进行排序。 6.2插入排序 6.2.1直接插入排序 【基本思想】 体育课上,可能许多同学看到体育老师整队的情形,根据身高排队,假设也是由大到小(由高到低)的顺序,常常用这样的方法:第一个同学出来站队,第二个同学上来时先对比一下如果比他低则在他的后面……如果已经有I-1个同学按序排好了,第I个同学上来时从第一个到第I-1个同学依次往后找,找到第一个比他低的记为J,那就应是第I个同学的位置;找到位置后要进行移位,因为原来大家都已站好了,位置不空,要从原有序队列最后一个同学开始一直到第J个同学依次往后移一位,最后这第I个同学就在J位置……如此重复直到全部排完。 插入排序的每一轮有三个步骤:找到位置;移位;就位。 【程序清单】 program example16_1; {Insert sort} const n=100; var a,b:array[0..n] of integer; {a数组存放原始数据,b存放排序

文档评论(0)

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

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

1亿VIP精品文档

相关文档