排序的基本概念

>排序是数据结构的一种重要运算。
>
本章的5.1节至5.6节介绍内排序的各种方法,5.7节介绍外排序方法。
此外,堆排序也是一种典型的选择排序,有关堆排序的算法将在第8章中介绍。

 

#5.1基本概念

>  在讨论排序的概念之前,首先引入**排序码**的概念。
排序码是结点中的一个或多个字段,其值作为排序运算中的依据。
排序码可以是关键码,这时的排序是按关键码对文件进行排序的;
排序码也可以不是关键码,这时可能有多个结点的排序码具有相同的值,因而排序结果可能不唯一。
排序码的数据类型既可以是正数,也可以是实数或字符串,甚至是复杂的组合数据类型。

>  按照一般习惯,在排序中**将结点称为记录,将一系列结点构成的线性表称为文件**。在本书中后续涉及排序时,都会使用记录和文件这两个概念,读者应将它们和外存中的记录和文件等概念加以区别。

>  排序(sorting)又称为分类。假定文件中有n个记录{A1,A2,……,An},每个记录有一个排序码Ki,{K1,K2,……,Kn}是相应的排序码的集合。**排序运算就是将上述文件中的记录按排序码非递减(或非递增)的次序排列成有序序列**。

>  在各种待排序的文件中,由于记录的大小和数量不等,有的文件记录本身较大且数量很多,有的文件记录本身较小且数量较少。对于较小的文件,可以一次将文件全部调入内存进行排序处理;而对于很大的文件,无法将其一次全部调入内存进行排序处理,因而在排序过程中会涉及内外存之间的数据交换。在排序过程,文件全部放在内存处理的排序算法称为“**内排序**”;在排序过程中,不仅需要使用内存,而且还要使用外存的排序算法称为“**外排序**”。按照所采用的策略的不同,排序方法可以分为**5**种类型:**插入排序、选择排序、交换排序、分配排序、归并排序和外排序**。当然,由于关注的重点不同,一个具体的排序算法既可以看成是这一种,也可以看成是那一种。也就是说,一个具体的排序算法究竟应该属于上述5种类型中的哪一种,答案并不是唯一的。

>  在待排序的文件中,可能存在着多个具有相同排序码的记录。对于一个排序算法,如果任意具有相同排序码的多个记录在排序之后,这些记录的相对次数仍然保持不变,则称该排序算法为“**稳定的**”;否则称该排序算法为“**不稳定的**”。排序的方法很多,就其性能而言,很难说哪种算法最好。每种算法都有各自的优缺点,适合于不同的应用领域。

>  有两个评价排序算法的重要指标,一个是算法执行时所需的**时间**,另一个是算法执行时所需的**内存空间**。其中,**时间开销是衡量一个排序算法好坏的最重要的性能指标**。为了便于分析,排序算法的时间开销通常用算法执行中的比较次数和记录移动次数来表示。许多排序算法执行排序时所耗费的时间不仅与算法本身有关,而且与待排序文件的记录顺序有关,可以采用最大执行时间和平均执行时间来衡量这些排序算法的性能。

>  为了便于讨论,假定排序要求都是按非递减序进行排序的。
>  本章后续各节将分别讨论插入排序、交换排序、分配排序、归并排序和外排序,给出典型排序算法的面向对象的具体实现描述。同时,对主要排序算法的性能进行必要的分析和讨论。执行排序算法所需的空间量一般都不大,对算法性能好坏的影响并不大,我们只给出结果,而不加以讨论。

posted @ 2014-12-11 20:22  ChuckLu  阅读(448)  评论(0编辑  收藏  举报