数据结构第10章

合集下载

数据结构第十章习题课

数据结构第十章习题课

1.下列排序算法中,其中()是稳定的。

A. 堆排序,冒泡排序B. 快速排序,堆排序C. 直接选择排序,归并排序D. 归并排序,冒泡排序2.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。

A. 快速排序B. 堆排序C. 归并排序D. 直接插入排序3.排序趟数与序列的原始状态有关的排序方法是( )排序法。

A.插入 B. 选择 C. 冒泡 D. 快速4.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47 (4)15 21 25 47 84 则采用的排序是( )。

A. 选择B. 冒泡C. 快速D. 插入5.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是()排序。

A. 选择B. 快速C. 希尔D. 冒泡6.若上题的数据经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是()排序。

A.选择 B. 堆 C. 直接插入 D. 冒泡7.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是()A.直接插入排序B.冒泡排序C.简单选择排序8.下列排序算法中,()算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。

A. 堆排序B. 冒泡排序C. 快速排序D. 插入排序9. 下列排序算法中,占用辅助空间最多的是:( )A. 归并排序B. 快速排序C. 希尔排序D. 堆排序10.用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是()。

A.94,32,40,90,80,46,21,69 B.32,40,21,46,69,94,90,80C.21,32,46,40,80,69,90,94 D.90,69,80,46,21,32,94,4011. 若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行()次比较。

数据结构答案 第10章 排序学习与指导

数据结构答案 第10章 排序学习与指导

第10章排序10.1 知识点分析1.排序基本概念:(1)排序将数据元素的任意序列,重新排列成一个按关键字有序(递增或递减)的序列的过程称为排序。

(2)排序方法的稳定和不稳定若对任意的数据元素序列,使用某个排序方法,对它按关键字进行排序,若对原先具有相同键值元素间的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;反之,则称为不稳定的。

(3)内排序整个排序过程都在内存进行的排序称为内排序,本书仅讨论内排序。

(4)外排序待排序的数据元素量大,以致内存一次不能容纳全部记录,在排序过程中需要对外存进行访问的排序称为外排序。

2.直接插入排序直接插入排序法是将一个记录插到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。

3.二分插入排序二分插入排序法是用二分查找法在有序表中找到正确的插入位置,然后移动记录,空出插入位置,再进行插入的排序方法。

4.希尔排序希尔排序的基本思想是:先选取一个小于n的整数d1作为第一个增量,把待排序的数据分成d1个组,所有距离为d1的倍数的记录放在同一个组内,在各组内进行直接插入排序,每一趟排序会使数据更接近于有序。

然后,取第二个增量d2,d2< d1,重复进行上述分组和排序,直至所取的增量d i=1(其中d i< d i-1 < ……< d2< d1),即所有记录在同一组进行直接插入排序后为止。

5.冒泡排序冒泡法是指每相邻两个记录关键字比大小,大的记录往下沉(也可以小的往上浮)。

每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此为止;到所有记录都不发生下沉时,整个过程结束。

6.快速排序快速排序法是通过一趟排序,将待排序的记录组分割成独立的两部分,其中前一部分记录的关键字均比枢轴记录的关键字小;后一部分记录的关键字均比枢轴记录的关键字大,枢轴记录得到了它在整个序列中的最终位置并被存放好。

第二趟再分别对分割成两部分子序列,再进行快速排序,这两部分子序列中的枢轴记录也得到了最终在序列中的位置而被存放好,并且它们又分别分割出独立的两个子序列……。

第10章 排序 PPT课件

第10章 排序 PPT课件

清华大学出版社
概述
数据结构(C++版)
排序算法的存储结构
从操作角度看,排序是线性结构的一种操作,待排序 记录可以用顺序存储结构或链接存储结构存储。
假定1:采用顺序存储结构,关键码为整型,且记录 只有关键码一个数据项。
int r[n+1]; //待排序记录存储在r[1]~r[n],r[0]留做他用
假定2:将待排序的记录序列排序为升序序列。
i = 6 18 10 15 21 25 25* 18
10 15 18 21 25 25*
r[0]的作用? 暂存单元 43;+版)
关键问题(1)如何构造初始的有序序列?
解决方法:
将第1个记录看成是初始有序表,然后从第2个记录起 依次插入到这个有序表中,直到将第n个记录插入。 算法描述:
学号 0001 0002 0003 …
姓名 王军 李明 汤晓影

高数 85 64 85 …
英语 68 72 78 …
思想品德 88 92 86 …
清华大学出版社
概述
数据结构(C++版)
排序的基本概念
单键排序:根据一个关键码进行的排序; 多键排序:根据多个关键码进行的排序。
学号 0001 0002 0003 …
算法描述:
r[0]=r[i]; j=i-1; while (r[0]<r[j]) {
r[j+1]=r[j]; j--; }
r[0]有两个作用:
1. 进入循环之前暂存了r[i] 的值,使得不致于因记录 的后移而丢失r[i]的内容;
2. 在查找插入位置的循环 中充当哨兵。
清华大学出版社
插入排序
姓名 王军 李明 汤晓影

数据结构(严蔚敏)第10章

数据结构(严蔚敏)第10章

一、什么是排序?
排序是计算机内经常进行的一种操作, 其目的是将一组“无序”的记录序列调 整为“有序”的记录序列。
例如:将下列关键字序列 52, 49, 80, 36, 14, 58, 61, 23, 97, 75
调整为
14, 23, 36, 49, 52, 58, 61 ,75, 80, 97 .页 08.06.2020
10. 2 插入排序
.页 08.06.2020
一趟直接插入排序的基本思想:
有序序列R[1..i-1]
无序序列 R[i..n]
R[i]
有序序列R[1..i]
无序序列 R[i+1..n]
.页 08.06.2020
实现“一趟插入排序”可分三步进行:
1.在R[1..i-1]中查找R[i]的插入位置,
R[1..j].key R[i].key < R[j+1..i-1].key;
有序序列区 无 序 序 列 区
经过一趟排序
08.06.2020
有序序列区 无 序 序 列 区
.页
基于不同的“扩大” 有序序列长 度的方法,内部排序方法大致可分 下列几种类型:
插入类 交换类 选择类
归并类 其它方法
.页 08.06.2020
#待de排fin记e M录A的XS数IZ据E 类10型00定// 义待排如顺下序:表最大长度
第十章 排序
.页 08.06.2020
【课前思考】
1. 你熟悉排序吗?你过去曾经学过哪些排序方法? 在第一章中曾以选择排序和起泡排序为例讨论算 法实践复杂度,不知你还记得吗? 2. 你自己有没有编过排序的程序?是用的什么策 略?
.页 08.06.2020
【学习目标】

数据结构考研试题精选及答案第10章排序

数据结构考研试题精选及答案第10章排序

第10章 排序排序排序一、选择题 1.某内排序方法的稳定性是指.某内排序方法的稳定性是指( )( )( )。

【南京理工大学【南京理工大学 1997 1997 1997 一、一、一、101010((2分)】 A .该排序算法不允许有相同的关键字记录该排序算法不允许有相同的关键字记录 B B B..该排序算法允许有相同的关键字记录记录C .平均时间为0(n log n n log n)的排序方法)的排序方法)的排序方法D D D.以上都不对.以上都不对.以上都不对2.下面给出的四种排序法中下面给出的四种排序法中( )( )( )排序法是不稳定性排序法。

排序法是不稳定性排序法。

【北京航空航天大学北京航空航天大学 1999 1999 1999 一、一、10 10 ((2分)】 A. A. 插入插入插入 B. B. B. 冒泡冒泡冒泡 C. C. C. 二路归并二路归并二路归并 D. D. D. 堆积堆积堆积 3.下列排序算法中,其中(.下列排序算法中,其中( )是稳定的。

)是稳定的。

)是稳定的。

【福州大学【福州大学 1998 1998 1998 一、一、一、3 (23 (2分)】A. A. 堆排序,冒泡排序堆排序,冒泡排序堆排序,冒泡排序B. B. B. 快速排序,堆排序快速排序,堆排序快速排序,堆排序C. C. 直接选择排序,归并排序直接选择排序,归并排序直接选择排序,归并排序D. D. D. 归并排序,冒泡排序归并排序,冒泡排序归并排序,冒泡排序4.稳定的排序方法是(.稳定的排序方法是( )) 【北方交通大学【北方交通大学【北方交通大学 2000 2000 2000 二、二、二、33(2分)】 A .直接插入排序和快速排序.直接插入排序和快速排序 B B B.折半插入排序和起泡排序.折半插入排序和起泡排序.折半插入排序和起泡排序C .简单选择排序和四路归并排序.简单选择排序和四路归并排序D D D.树形选择排序和.树形选择排序和shell 排序排序5.下列排序方法中,哪一个是稳定的排序方法?(.下列排序方法中,哪一个是稳定的排序方法?( ) 【北方交通大学【北方交通大学【北方交通大学 2001 2001 2001 一、一、一、88(2分)】A .直接选择排序.直接选择排序B B B.二分法插入排序.二分法插入排序.二分法插入排序C C C.希尔排序.希尔排序.希尔排序D D D.快速排序.快速排序.快速排序6.若要求尽可能快地对序列进行稳定的排序,则应选(.若要求尽可能快地对序列进行稳定的排序,则应选(A A .快速排序.快速排序 B B B.归并排序.归并排序.归并排序 C C C.冒.冒泡排序)。

数据结构 排序

数据结构 排序
选择排序种类: 简单选择排序 树形选择排序 堆排序
2019/9/7
30
10.4.1 简单选择排序
待排记录序列的状态为:
有序序列R[1..i-1] 无序序列 R[i..n]
有序序列中所有记录的关键字均小于无序序列中记 录的关键字,第i趟简单选择排序是从无序序列 R[i..n]的n-i+1记录中选出关键字最小的记录加入 有序序列
2019/9/7
5
排序的类型定义
#define MAXSIZE 20 // 待排序记录的个数
typedef int KeyType;
typedef struct
{ KeyType key;
InfoType otherinfo; ∥记录其它数据域
} RecType;
typedef struct {
RecType r[MAXSIZE+1];
分别进行快速排序:[17] 28 [33] 结束 结束
[51 62] 87 [96] 51 [62] 结束
结束
快速排序后的序列: 17 28 33 51 51 62 87 96
2019/9/7
26
自测题 4 快速排序示例
对下列一组关键字 (46,58,15,45,90,18,10,62) 试写出快速排序的每一趟的排序结果

final↑ ↑first
i=8
[51 51 62 87 96 17 28 33]

final↑ ↑first
2019/9/7
14
希尔(shell )排序
基本思想:从“减小n”和“基本有序”两 方面改进。
将待排序的记录划分成几组,从而减少参 与直接插入排序的数据量,当经过几次分 组排序后,记录的排列已经基本有序,这 个时候再对所有的记录实施直接插入排序。

数据结构第10章习题


三、填空题
1. 设用希尔排序对数组{98,36,-9,0,47,23, 1,8,10,7}进行排序,给出的步长(也称增量 序列)依次是4,2,1则排序需__________趟, 写出第一趟结束后,数组中数据的排列次序 __________。 【南京理工大学 1997 三、5 (2分)】 2.若不考虑基数排序,则在排序过程中,主要进行 的两种基本操作是关键字的______和记录的 _____。 【北京邮电大学 2001 二、7 (4分)】 3.分别采用堆排序,快速排序,冒泡排序和归并排 序,对初态为有序的表,则最省时间的是_____ 算法,最费时间的是______算法。【福州大学 1998 二、10 (2分)】
பைடு நூலகம்
12.就排序算法所用的辅助空间而言,堆排序,快 速排序,归并排序的关系是( a ) A.堆排序〈 快速排序〈归并排序 B.堆排序 〈 归并排序〈 快速排序 C.堆排序〉 归并排序 〉快速排序 D.堆排 序 > 快速排序 > 归并排序 E.以上答案都不 对 【西安交通大学 1996 三、1 (3分)】 13.将两个各有N个元素的有序表归并成一个有序表, 其最少的比较次数是( a ) A.N B.2N-1 C.2N D.N-1
2.比较次数与排序的初始状态无关的排序方法是 ( d )。【北方交通大学 2000 二、2(2分)】
A.直接插入排序 D.简单选择排序 B.起泡排序 C.快速排序
3.数据序列(8,9,10,4,5,6,20,1,2)只能是 下列排序算法中的( c )的两趟排序后的结果。 【合肥工业大学 1999 一、3 (2分)】 A.选择排序 B.冒泡排序 C.插入排序 D.堆排序 4.数据序列(2,1,4,9,8,10,6,20)只能是下 列排序算法中的( a )的两趟排序后的结果。 A. 快速排序 B. 冒泡排序 C. 选择排序 D. 插入排序 5.对序列{15,9,7,8,20,-1,4}进行排序,进行 一趟后数据的排列变为{4,9,-1,8,20,7,15}; 则采用的是( c )排序。【南京理工大学 1998 一、8(2分)】 A. 选择 B. 快速 C. 希尔 D. 冒泡

数据结构第10章排序练习及答案

9.1选择题1.从末排序的序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在排序序列的合适位置,该排序方法称为()排序法。

A)插入B)选择C)希尔D)二路归并【答案】A2.下面各种排序方法中,最好情况下时间复杂度为O(n)的是()A)快速排序B)直接插入排序C)堆排序D)归并排序【答案】B3.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,无序序列的变化情况如下:25 84 21 47 15 27 68 35 2020 15 21 25 47 27 68 35 8415 20 21 25 35 27 47 68 8415 20 21 25 27 35 47 68 84则所采用的排序方法是()A)选择排序B)希尔排序C)归并排序D)快速排序【答案】D4.下面给出的四种排序法中,()排序是不稳定排序法。

A)插入B)冒泡C)二路归并D)堆【答案】D5.快速排序方法在()情况下最不利于发挥其长处。

A)要排序的数据量太大B)要排序的数据中含有多个相同值C)要排序的数据已基本有序D)要排序的数据个数为奇数【答案】C6.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()A)38,40,46,56,79,84B)40,38,46,79,56,84C)40,38,46,56,79,84D)40,38,46,84,56,79【答案】C7.对记录的关键码{50,26,38,80,70,90,8,30,40,20}进行排序,各趟排序结束时的结果为:50,26,38,80,70,90 ,8,30,40,2050,8,30,40,20,90,26,38,80,7026,8,30,40,20,80,50,38,90,708,20,26,30,38,40,50,70,80,90其使用的排序方法是()A)快速排序B)基数排序C)希尔排序D)归并排序【答案】C8.以下序列不是堆的是()A)100,85,98,77,80,60,82,40,20,10,66B)100,98,85,82,80,77,66,60,40,20,10C)10,20,40,60,66,77,80,82,85,98,100D)100,85,40,77,80,60,66,98,82,10,20【答案】D【解析】根据堆采用完全二叉树的顺序存储形式及堆的特点,因第一个结点即根结点关键字值最大,则应建立一个大根堆,但依据此数据序列建立起堆后关键字值为40的左右孩子结点分别为60、66,不符合大根堆特点。

数据结构第九、十章 作业答案

第九章 查找一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。

2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。

设有100个结点,用二分法查找时,最大比较次数是 7 。

3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ,其下标从小到大依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。

解:显然,平均查找长度=O (log 2n )<5次(25)。

但具体是多少次,则不应当按照公式)1(log 12++=n nn ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。

因为这是在假设n =2m -1的情况下推导出来的公式。

应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!! 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。

5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。

6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。

7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。

如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。

(而任一元素查找次数 ≤n-1)8、设一哈希表表长M 为100 ,用除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找方法中,平均查找长度与结点个数无关的是哈希查找法 10、对线性表进行二分查找时,要求线性表必须以 顺序 方式存储,且结点按关键字有序排列。

数据结构Ch10习题答案

第十章内部排序一、择题1.用直接插入排序法对下面四个表进行(由小到大)排序,比较次数最少的是(B)。

A.(94,32,40,90,80,46,21,69)插32,比2次插40,比2次插90,比2次插80,比3次插46,比4次插21,比7次插69,比4次B.(21,32,46,40,80,69,90,94)插32,比1次插46,比1次插40,比2次插80,比1次插69,比2次插90,比1次插94,比1次C.(32,40,21,46,69,94,90,80)插40,比1次插21,比3次插46,比1次插69,比1次插94,比1次插90,比2次插80,比3次D.(90,69,80,46,21,32,94,40)插69,比2次插80,比2次插46,比4次插21,比5次插32,比5次插94,比1次插40,比6次2.下列排序方法中,哪一个是稳定的排序方法(BD)。

A.希尔排序B.直接选择排序C.堆排序D.冒泡排序下列3题基于如下代码:for(i=2;i<=n;i++){ x=A[i];j=i-1;while(j>0&&A[j]>x){ A[j+1]=A[j];j--;}A[j+1]=x}3.这一段代码所描述的排序方法称作(A)。

A.插入排序B.冒泡排序C.选择排序D.快速排序4.这一段代码所描述的排序方法的平均执行时间为(D)A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)5.假设这段代码开始执行时,数组A中的元素已经按值的递增次序排好了序,则这段代码的执行时间为(B)。

A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)6.在快速排序过程中,每次被划分的表(或了表)分成左、右两个子表,考虑这两个子表,下列结论一定正确是(B)。

A.左、右两个子表都已各自排好序B.左边子表中的元素都不大于右边子表中的元素C.左边子表的长度小于右边子表的长度D.左、右两个子表中元素的平均值相等7.对n个记录进行堆排序,最坏情况下的执行时间为(C)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

24
15
16
21
1 00
18
26
38
30
25
50
28
1 10
40
… …













1
2
3
4
5
6
7
8
图10.8 对应于图10.6的败方树
第10章 外部排序
全 局优 胜者
8
9 15
20
15
… …


15 25
顺 串 4
图10.9 败方树的修改
第10章 外部排序
图10.11 磁带排序过程
第10章 外部排序
2. 非平衡归并
设初始顺串的长度为度量单位,即规定初始顺串的长度为1, 用Sn来表示某台磁带机上有n个顺串,每个顺串的长度为S。
假设初始顺串有八个,则在T1上分配五个顺串,在T2上分配 三个顺串,然后把T2上的三个顺串与T1中的三个顺串相归并, 得到三个长度为2的顺串,将它们写到T3上。下一步把T1中的两 个顺串与T3中的两个顺串相归并,得到两个长度为3的顺串,把 它们写到T2上。再下一步是把T3上一个长度为2的顺串与T2中的 一个长度为3的顺串进行归并,得到一个长度为5的顺串,将其 写到T1上。最后,把T1上一个长度为5的顺串与T2上一个长度为3 的顺串进行归并,得到一个长度为8的顺串,把它写到T3上。至 此,完成了非平衡2路归并排序。
第10章 外部排序
图10.12 采用非平衡分布法用三台磁带机实现2路归并
第10章 外部排序
图10.13 三带2路归并的顺串分布
第10章 外部排序
图10.14 四带3路归并的顺串分布
谢谢大家!
3. 初始顺串的生成
输入文件: 10, 9, 20, 6, 8, 12, 90, 17 14,22, 7, 24, 15, 16, 11, 100, 13, 18, 26, 38, 30, 25, 50, 28, 110, 21, 40, 19, …
a 输入文件,每个记录只列出其关键字值
图10.10 初始顺串的生成过程
第10章 外部排序
10.1.2 磁盘存储器
1. 磁盘存储器的特性
磁盘存储器主要由磁盘组和磁盘驱动器组成。磁盘组由 若干个盘片组成,每个盘片有上下两个面,盘面上涂有光滑 的磁性物质。以6片盘组为例,由于最顶上和最底下盘片的外 侧面不能使用,所以总共只有10个面可用来保存信息,能够 存储信息的盘面称为记录面。在记录盘面上有许多称为磁道 的圆圈,信息就记载在磁道上。磁盘驱动器由主轴和读/写 磁头组成,每个盘面都配有一个读/写磁头。
第10章 外部排序
磁带存储器是一种典型的顺序存取设备。所谓顺序存取,就 是将记录在存储器上一个接一个地依次存放,为得到第i个记录, 必须先读第i-1个记录。磁带的存取时间主要用在定位上(即把磁 带转到待读/写信息所在的物理位置上),读/写头与所需信息 的距离越远,定位时间就越长,一般情况下,定位时间为20毫秒 至数分钟。当磁带转到信息所在位置上时才开始真正读写数据。 磁带的读写速度由走带速度和存储密度所决定, 对于存储密度 为800字节/英寸的磁带来说,每秒钟约可写800×200=160 000 字节。由于磁带机不是连续运转的设备,而是一种启停设备,因 而磁带的运转从静止到达正常的走带速度以及从正常运转到达停 止都需要一定的时间。 在启停时间内,不能对磁带进行正常读 写,因此磁带上的信息通常分为若干记录块,块与块之间留有一 定的间隙,该间隙一般为1/4~3/4英寸。
数据结构第10章
第10章 外部排序
目前常用的典型磁带长2400英尺1英尺=0.3048 m,宽0.5 英寸1英寸=0.0254 m,厚0.002英寸。磁带表面上涂有磁性材 料,可分为七道或九道磁带。七道磁带的每一横排中有六个 二进制数据位和一个奇偶校验位。九道磁带的每一横排中有 八个二进制数据位和一个奇偶校验位。这样的一排二进制数 据位组成一个字节。磁带的存储密度(每英寸带面上所存放 的字节数)通常为800字节/英寸和1600字节/英寸两种, 走带速度为200英寸/s。
1000×0.05+1000×0.6/100=56英寸
第10章 外部排序
显然,采用分页块存储法后,可以大大节省存储空间, 而且页块越大,浪费间隙的空间越小。但是这并不等于说页 块越大越好,原因是采用分页块存储后,内外存数据交换的 基本单位为页块,而不是记录,因此需要在内存中开辟一个 数据缓冲区来暂存一个页块的内容,以便进行输入输出操作。 页块越大,则要求缓冲区越大,这势必会过多地占用内存空 间,造成读写时间过长、出错概率过大等一系列的问题, 所以应适当地选择页块的大小。 通常一个页块取1 KB~8 KB为宜。
第10章 外部排序
移 动 方向
活动臂
主轴
盘片 磁道 柱面
磁头
磁头
图10.2 活动臂示意图
第10章 外部排序
活动臂磁盘的磁头是安装在一个可活动臂上,随着活动 臂的移动, 磁头可在盘面上做同步的径向移动,从一个磁道 移到另一个磁道, 当盘面高速旋转,磁道在读/写头下通过 时,便可进行信息的读写。各记录盘面上半径相同的磁道合 在一起称为一个柱面, 柱面上各磁道在同一磁头位置下,即 活动臂移动时,实际上是把这些磁头从一个柱面移到另一个 柱面。 一个磁道内还可以分为若干段,称为扇段。因此,对 磁盘存储来说,由大到小的存储单位是: 盘片组,柱面,磁 道,扇段。以IBM2314型磁盘为例,其参数为:20个记录面 /磁盘组,200个磁道/记录面,7294字节/磁道。因此, 整个盘片组的容量为: 7294×200×200≈29 MB。
第10章 外部排序
2. 分页块存储方法
为了减少存储空间的浪费,通常采用把若干个记录组合 成页块进行存储的办法,将记录间的间隙变成页块间的间隙。 一般情况下,可以把记录称为逻辑记录,而把逻辑记录组合 成的页块称为物理记录。对于上述例子,如果将100个记录 作为一个页块,则存放1000个记录仅需长度为
第10章 外部排序
磁盘的存取时间主要取决于寻查时间和等待时间。 磁 盘以2400~3600 r/min的速度旋转,因此平均等待时间约为 10 ms~20 ms, 而平均寻查时间约为几毫秒至几十毫秒,这 与CPU的处理速度相比较而言,仍是很慢的。因此,在讨论 外存的数据结构及其上的操作时,要尽量设法减少访问外存 的次数, 以提高磁盘存取效率。
第一步,每次将三个页块(600个记录)由外存读到内存, 进行内排序,整个文件共得到6个初始顺串R1~R6 (每一个顺 串占三个页块),然后把它们写回到磁盘上去,如图10.3所示。
第10章 外部排序
顺 串 R 1
顺 串 R 2
顺 串 R 3
顺 串 R 4
顺 串 R 5
顺 串 R 6
1 ~ 6 0 0 6 0 1 ~ 1 2 0 0 1 2 0 1 ~ 1 8 0 0 1 8 0 1 ~ 2 4 0 0 2 4 0 1 ~ 3 0 0 0 3 0 0 1 ~ 3 6 0 0
第10章 外部排序
2. 多路归并
1 2 34
56 78
9 10 11 12
13 14 15 16
图10.5 16个顺串归并的示例
第10章 外部排序
6
6
8
9
6
8
17
10
9
20
6
8
12
90
17
10
9
20
6
8
12
90
17
14
22
24
15
16
21
100
18
26
38
30
25
50
28
110
40
… … … … … … … …
第10章 外部排序
T1 顺串1 顺串3 顺串5 T2 顺串2 顺串4 顺串6 T3 输入文件 3600个记录
T1 顺串1 顺串3 顺串5 T2 顺串2 顺串4 顺串6 T3 顺串1 顺串3
T1 顺串1(包含2400个记录)
T2
顺串3
T4 顺串2
(a) 第一步后磁带的状况
(b) 第二步后磁带的状况
(c) 第三步后磁带的状况
第10章 外部排序
10.2 外排序的基本方法
10.2.1 磁盘排序
1.
假 设 磁 盘 上 存 有 一 文 件 , 共 有 3600 个 记 录 ( A1, A2, A3600),页块长为200个记录,供排序使用的缓冲区可提供容 纳600个记录的空间,现要对该文件进行排序,排序过程可按 如下步骤进行:
串时需作一遍扫描外,各顺串的归并还需 2 2 遍扫描 把6个 长为600个记录的顺串归并为3个长为1200个3记录的顺串需要
扫 描 一 遍 ; 把 两 个 长 为 1200 个 记 录 的 顺 串 归 并 为 一 个 长 为 2400个记录的顺串需要扫描2/3遍, 把一个长为2400个记录的 顺串与另一个长为1200个记录的顺串归并在一起, 需要扫描 一遍。
















1
2
3
4
5
6
7
8
图10.6 8路归并程序的选择树(胜方树)

第10章 外部排序
8
9
8
9
15
20
15
15 25

顺 串 4
图10.7 胜方树的修改
第10章 外部排序
全 局优 胜 者
6
8
9
17
10
20
12
相关文档
最新文档