排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。
为了方便讨论,在此首先要对排序下一个确切的定义:
假设含有n个记录的序列为
{ R1、R2、,。。。Rn }
其相应的关键字序列为
{K1、K2,。。。。Kn}
需确定1,2,。。。,n的一种排列 p1,p2,。。。pn,使其相应的关键字满足如下的非递减(或非递增)关系
Kp1 <= Kp2 <=........<= Kpn
即使这个序列称为一个按关键字有序的序列
{Rp1,Rp2,...., Rpn}
这样的操作称为排序。
排序分类:
1、稳定排序和非稳定排序
假设关键字 Ki = Kj (1 <= i <= n , 1<= j <= n , i != j ),且在排序前的序列中 Ri 领先于 Rj (即 i < j)。若在排序后的序列中,Ri 仍领先于 Rj ,则称所用的排序方法是稳定的;反之,若可能使排序后的序列中Rj 领先于 Ri ,则称所用的排序方法是不稳定的的。
2、内排序和外排序
内排序指的是待排序记录存放在计算机随机存储器中进行的排序过程;外排序是指待排序记录的数量很大,以致内存依次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。
总之,在排序的过程中需进行下列两种基本操作:1) 比较两个关键字的大小 ;2)将记录从一个位置移动到另一个位置;
下面讨论内排序:
一、插入排序
1、直接插入排序
直接排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表;
设待排文件f = (R1 R2 ........... Rn)相应的 key 集合为k = {k1 k2 ........kn },其排序方法是:
现将文件中的(R1)看成只含一个记录的有序子文件,然后从R2起&#