/ 知识库     / 试卷库

考研2023年计算机统考( )

对含有n (n>0)个记录的文件进行外部排序,采用置换-选择排序生成初始归并段时需要使用一个工作,工作区中能保存m个记录,请回答下列问题。

(1) 如果文件中有19条记录,其关键字分别为:51,94,37,92,14,63,15,99,48,56,23,60,31,17,43,8,90,166,100,当m=4时,可生成几个初试归并段,各是什么?

(2)对任意m (n≫m>0),生成的第一个初试归并段长度最大值和最小值分别多少?

⑴ 对题目所给关键字序列进行置换-选择排序:

初始FI:51,94,37,92,14,63,15,99,48,56,23,60,31,17,43,8,90,166,100;

WA和FO均为空。

第一趟:

从FI读4个记录到WA:51,94,37,92

从WA选择最小的值,记不MINIMAX,输出到FO:37

从FI读1个记录到WA:51,94,92,14

从WA选择最小,但不小于当前MINIMAX的值,输出到FO:37,51

重复上面两步操作,依次得:

WA:94,92,14,63

FO:37,51,63

WA:94,92,14,15

FO:37,51,63,92

WA:94,14,15,99

FO:37,51,63,92,94

WA:14,15, 99,48

FO:37,51,63,92,94,99

WA:14,15,48,56

此时已选不出新的MINIMAX,得第一个归并段:37,51,63,92,94,99

第二趟:

WA:14,15,48,56

FO:14

WA:15,48,56,23

FO:14,15

WA:48,56,23,60

FO:14,15,23

WA:48,56,60,31

FO:14,15,23,31

WA:48,56,60,17

FO:14,15,23,31,48

WA:56,60,17,43

FO:14,15,23,31,48,56

WA:60,17,43,8

FO:14,15,23,31,48,56,60

WA:17,43,8,90

FO:14,15,23,31,48,56,60,90

WA:17,43,8,166

FO:14,15,23,31,48,56,60,90,166

WA:17,43,8,100

此时已选不出新的MINIMAX,得第二个归并段:14,15,23,31,48,56,60,90,166

第三趟:

WA:17,43,8,100

FO:8

WA:17,43,100

FO:8,17

WA:43,8,100

FO:8,17,43

WA:100

FQ:8,17,43,100

最后分成三个归并段:

37,51,63,92,94,99

14,15,23,31,48,56,60,90,166

8,17,43,100

(2) 设输入序列为x1,x2,...,xn,且所有关键字互不相同。

考虑最大值的情况:

显然,刚开始进入WA的m个关键字一定能被输出,如果后面每次进入WA的关键字都能被输出,只要该关键字恰巧大于刚刚输出的关键字即可。特殊地,取x1<x2<...<xn,则所有的关键字都能被输出到第一个归并段,此时第一归并段的长度取最大值n。

再考虑最小值的情况:

同样,刚开始进入WA的m个关键字一定能被输出,如果后面每次进入WA的关键字都不能被输出,只要该关键字恰巧小于刚刚输出的关键字即可。特殊地,取x1>x2>...>xn,则只有前m个关键字被输出到第一个归并段,此时第一归并段的长度取最小值m。

假设初始待排序文件为输入文件FI,初始归并段文件为输出文件FO,内存工作区为WA,FO和WA初始为空,设内存工作区WA的容量可容纳w个记录。则置换-选择排序的操作过程为:

① 从FI输入w个记录到缓冲区WA;

② 从WA中选出其中关键字取最小值的记录,记为MINIMAX记录;

③ 将MINIMAX记录输出到FO中去;

④ 若FI不空,则从FI输入下一个记录到WA中;

⑤ 从WA中所有比MINIMAX记录的关键字大的记录中选出最小关键字记录,作为新的MINIMAX记录;

⑥ 重复③~⑤,直到在WA中选不出新的MINIMAX为止,由此得到一个初始归并段,输出归并段结束标志到FO中;

⑦ 重复②~⑥,直到WA为空,由此得到全部初始归并段。