置换—选择排序

置换——选择排序

土办法构造初始归并段

同时最多放两个到输入缓冲区,只能读入两块的内容,然后把这些记录在内存排序之后,在输出写回外存,这样就得到了一个初始归并段。

由于内部排序的内存工作区只能容纳6个记录(例子)。

可以用一片更大的内存区域来进行内部排序(如:可容纳18个记录)

用于内部排序的内存工作区WA可容纳l个记录,这就意味着构造的初始归并段也只能包含l个记录,若文件共有n个记录的话,则初始归并段数量r=n/l

置换—选择排序

注:假设用于内部排序的内存工作区只能容纳3个记录

刚开始会在待排序的文件当中读入3个记录

我们要构造递增的归并段

检查内存工作区中的记录,把关键字最小的记录”置换“出去,并且用一个变量MINIMAX把刚才输出的关键字的值给记下来

现在内存工作区中有一个空位,会在FI读入下一个记录

再把最小的置换出去,并且用MINIMAX记录。

读着读着,

此时,内存工作区当中最小的一个记录是10,但是通过MINIMAX这个变量我们知道,之前输出到归并段1的记录到13了,所以10这个记录我们不能放到归并段1的末尾。

除了10 就是到14比13大,所以我们可以把14放到归并段1的末尾

紧接着读入下一个。。

读到2的时候最小的比MINIMAX小,所以不能放到归并段1的末尾

所以把30放出到归并段1的末尾。

在一直放。。

如果在某一个时刻WA内的关键字都比MINIMAX更小,则该归并段在此截至。

接下来构造归并段2

。。。

接下来构造归并段3

。。。

这些初始归并段的长度可以超越内存工作区的大小的限制

读写磁盘是以磁盘块为单位的。

知识回顾

原文地址:https://www.cnblogs.com/jev-0987/p/13322225.html