8.7外部排序

一、外存、内存之间的交换

8.7外部排序_第1张图片
读磁盘,在内存中申请一片空间,其大小可以和磁盘块的大小保持一致,1KB.
8.7外部排序_第2张图片
通过程序代码,修改内存中的内容
8.7外部排序_第3张图片
写磁盘,也是以块为单位,可以将写回,也可以写回别的磁盘块。

二、外部排序原理


申请的三个缓冲区的大小与磁盘块大小保持一致

8.7外部排序_第4张图片
先将前两个磁盘块写入缓冲区1、2,并对其进行内部排序。
8.7外部排序_第5张图片
将要写回磁盘的缓冲区1的内容写到输出缓冲区,然后写入磁盘8.7外部排序_第6张图片


每个磁盘块都要进行一次读写操作,总共进行16*2次读写。

分别挑选两个归并段中两个较小的,读入内存


每次从两个缓冲区中挑选最小的元素,放到输出缓冲区中,当输出缓冲区存储1KB之后,将其写回外存

8.7外部排序_第7张图片


8.7外部排序_第8张图片

8.7外部排序_第9张图片
第二趟归并


8.7外部排序_第10张图片

8.7外部排序_第11张图片

时间开销分析
8.7外部排序_第12张图片
时间开销主要在读写磁盘,如果可以减少归并次数,即减少了读写次数,这样可以提高效率

8.7外部排序_第13张图片
通过下面的败者树可以减少对比关键字次数

一次将四个磁盘块内容加入输入缓冲区进行内部排序,可以得到4个初始归并段,然后进行4路归并
8.7外部排序_第14张图片


8.7外部排序_第15张图片
8.7外部排序_第16张图片

三、败者树


8.7外部排序_第17张图片

8.7外部排序_第18张图片
派大星取代天净饭,并不需要重新进行比赛,只需要派大星与阿乐,程龙,孙悟空比较
8.7外部排序_第19张图片

8.7外部排序_第20张图片
8.7外部排序_第21张图片

8.7外部排序_第22张图片
8.7外部排序_第23张图片

8.7外部排序_第24张图片
8.7外部排序_第25张图片
如果新新加入的元素放在b1或b2,则只需要对比2次(看树的层次),若放在b3或b4,则只需要对比3次
8.7外部排序_第26张图片

四、置换-选择排序


8.7外部排序_第27张图片
8.7外部排序_第28张图片
8.7外部排序_第29张图片
8.7外部排序_第30张图片
8.7外部排序_第31张图片
8.7外部排序_第32张图片
可以先将14输出
8.7外部排序_第33张图片
接下来构造归并段28.7外部排序_第34张图片
8.7外部排序_第35张图片
8.7外部排序_第36张图片
上面演示,是一个一个元素进行移入
实际上,选出的元素会先加入输出缓冲区,等输出缓冲区满了之后,会将其一次性写入磁盘
对于初始待排序序列,也是先将其加入输入缓冲区,每一次会读入好几个,然后一个一个的将其加入内存工作区。

四、最佳归并树

8.7外部排序_第37张图片
8.7外部排序_第38张图片
先找权值最小的,先归并
8.7外部排序_第39张图片

8.7外部排序_第40张图片
8.7外部排序_第41张图片
8.7外部排序_第42张图片
添加几个长度为0的虚段

8.7外部排序_第43张图片

你可能感兴趣的:(数据结构学习)