所谓排序,就是整理文件中的记录,使之按关键字递增(或递减)的顺序排列起来。
1.被排序的对象--文件
被排序的对象--文件由一组记录组成。
记录则由若干数据项(或域)组成。其中有一项可用来标识一个记录,称为关键字项。该数据项的值称为关键字(Key)。
2.排序运算的依据--关键字
用来做排序运算依据的关键字,可以是数字类型,也可以是字符类型。关键字的选取应根据问题的要求而定。
3.排序的稳定性
在待排序记录的关键字均不相同时,排序结果是唯一的,否则排序结果不唯一。
在排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定
的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的。
4.排序方法的分类
1)按是否涉及数据的内、外存交换分
在排序过程中,若整个文件都是放在内存中处理,排序时不涉及数据的内外存交换,则称为内部排序(简称内排序)。反之,若排序过程中要进行数据的内、外存交换,则称为外部排序。内部排序适用于记录个数不很多的小文件。外排序则适用记录个数太多,不能一次将其全部记录放入内存的大文件。
2)按策略划分内部排序方法
可以分为5类:插入排序,选择排序,交换排序,归并排序和分配排序。
5.排序算法的基本操作
大多数排序算法都有两个基本的操作:
1)比较两个关键字的大小。
2)改变指向记录的指针或移动记录本身。
6.待排文件的常用存储方式
1)以顺序表(或直接用向量)作为存储结构
排序过程:对记录本身进行物理重排,即通过关键字之间的比较判定,将记录移到合适的位置。
2)以链表作为存储结构
排序过程:无须移动记录,仅需修改指针。通常将这类排序称为链表(或链式)排序。
3)用顺序的方式存储待排序的记录,但同时建立一个辅助表(如包括关键字和指向记录位置的指针组成的索引表)
排序过程:只需对辅助表的标目进行物理重排(即只移动辅助表的表目,而不移动记录本身)。适用于难在链表上实现,且仍需避免排序过程中移动记录的排序方法。