admin 管理员组

文章数量: 1184232


2024年3月14日发(作者:最常用的排序算法)

圣才电子书

十万种考研考证电子书、题库视频学习平台

第10章 外排序

一、单项选择题

(1)以下关于外排序的叙述正确的是______。

A.外排序把外存文件调入内存,再利用内排序方法进行排序,所以外排序所花的时间

完全由采用的内排序确定

B.外排序所花的时间=内排序时间+外存信息读/写时间+内部归并所花的时间

C.外排序并不涉及文件的读/写操作

D.外排序完全可以由内排序来替代

【答案】B

【解析】外排序所花的时间由内排序时间、外存读写时间、内部归并时间三部分时间构

成,因此AC两项错误,B项正确;外排序要将文件读取到内存中进行排序,但是由于文件

大小可能会大于内存的最大容量,因此外排序不能完全由内排序替代。

(2)如果将一个由置换-选择排序得到的输出文件F

1

(含所有初始归并段)作为输入

文件再次进行置换-选择排序,得到输出文件F

2

(含所有初始归并段),则F

1

和F

2

的差异是

______。

A.F

2

中归并段的个数减少

B.F

2

中归并段的最大长度增大

C.F

2

和F

1

无差异

1 / 5

【答案】C

圣才电子书

十万种考研考证电子书、题库视频学习平台

D.归并段个数及各归并段长度均不变,但F

2

中可能存在与F

1

不同的归并段

【解析】当进行一次置换-选择排序后,文件的归并段即达到理想状态,无论再进行多

少次排序,均不会发生变化,因此答案为C项。

(3)采用败者树进行k路平衡归并的外排序算法,其总的归并效率与k______。

A.有关

B.无关

【答案】A

【解析】利用败者树进行k路平衡归并不会影响总共需要的关键字比较次数,但是随着

k的增大,归并树的高度会减小,磁盘读/写的次数也就相应减少,从而提高总的归并效率,

因此答案为A项。

(4)对m个初始归并段实施k路平衡归并排序,所需的归并趟数是______。

A.1

B.m/k

C.

m/k

D.

log

k

m

【答案】D

【解析】采用k路归并,相应的归并树就有

log

k

m

+1层,则需要归并的趟数为

log

k

m

,答案为D项。

2 / 5

A.5

B.6

C.7

D.B

【答案】A

圣才电子书

十万种考研考证电子书、题库视频学习平台

(5)设有100个初始归并段,如果采用k路平衡归并3趟完成排序,则k值最小是______。

3

【解析】由题可知,应有

log

k

100

3

,则有

k

100

5

,答案为A项。



二、问答题

(1)简述磁盘外排序的基本步骤。

答:

①采用置换-选择排序算法生成m个初始归并段,并求出每个初始归并段中包含的记录

个数;

②根据内存大小和m值,尽可能选择较大的归并路数k,并构造出最佳归并树;

③按照最佳归并树的方案实施归并,产生一个有序文件F

out

(2)给出一组关键字T={12,2,16,30,8,28,4,10,20,6,18},设内存工

作区可容纳4个记录,写出用置换-选择算法得到的所有初始归并段。

答:

F

1

={2,8,12,16,28,30};

F

2

={4,6,10,18,20}。

(3)有一个无序文件中存放有若干个记录,其中所有记录构成的关键字序列为{41,

3 / 5

圣才电子书

十万种考研考证电子书、题库视频学习平台

39,28,32,22,19,11,50,13,21,1,33,37,3,52,16,4,8,72,12,32}。

设缓冲区ω有容纳5个记录的容量,按置换-选择算法求初始归并段,写出各初始归并段的

关键字。

答:

F

1

={22,28,32,39,41,50};

F

2

={1,11,13,19,21,33,37,52,72};

F

3

={3,4,8,16,12,32}。

(4)设有11个长度(即包含记录个数)不同的初始归并段,它们所包含的记录个数

为{25,40,16,38,77,64,53,88,9,48,98}。试根据它们做4路平衡归并,要

求:

①指出总的归并趟数;②构造最佳归并树;③根据最佳归并树计算每一趟及总的读记录

数。

答:

①进行了三趟归并。

②最佳归并树如下图:

第一趟读记录数为:9+16=25;

第二趟读记录数为:25+25+38+40+48+53+64=370;

第三趟读记录数为:88+98+128+242=556;

总的读记录数为:(9+16)×3+(25+38+40+48+53+64+77)×2+(88+98)=951。

4 / 5

0

圣才电子书

十万种考研考证电子书、题库视频学习平台

0

25 25

98 128

556

9

38

16

40 4853 64

242

77

88

三、算法设计题

设计一个算法,给定一个线性表,先对其遍历一遍,划分出若干个最大的有序子序列,

假设为k个有序子序列,将这些子序列作为初始归并段,采用k路归并方法将它们归并为

一个有序线性表(假设线性表采用不带头结点的单链表存放)。

答:略。

5 / 5


本文标签: 归并 排序 时间 初始