读磁盘,在内存中申请一片空间,其大小可以和磁盘块的大小保持一致,1KB.
通过程序代码,修改内存中的内容
写磁盘,也是以块为单位,可以将写回,也可以写回别的磁盘块。
申请的三个缓冲区的大小与磁盘块大小保持一致
先将前两个磁盘块写入缓冲区1、2,并对其进行内部排序。
将要写回磁盘的缓冲区1的内容写到输出缓冲区,然后写入磁盘
每个磁盘块都要进行一次读写操作,总共进行16*2次读写。
分别挑选两个归并段中两个较小的,读入内存
每次从两个缓冲区中挑选最小的元素,放到输出缓冲区中,当输出缓冲区存储1KB之后,将其写回外存
时间开销分析
时间开销主要在读写磁盘,如果可以减少归并次数,即减少了读写次数,这样可以提高效率
通过下面的败者树可以减少对比关键字次数
一次将四个磁盘块内容加入输入缓冲区进行内部排序,可以得到4个初始归并段,然后进行4路归并
派大星取代天净饭,并不需要重新进行比赛,只需要派大星与阿乐,程龙,孙悟空比较
如果新新加入的元素放在b1或b2,则只需要对比2次(看树的层次),若放在b3或b4,则只需要对比3次
可以先将14输出
接下来构造归并段2
上面演示,是一个一个元素进行移入
实际上,选出的元素会先加入输出缓冲区,等输出缓冲区满了之后,会将其一次性写入磁盘
对于初始待排序序列,也是先将其加入输入缓冲区,每一次会读入好几个,然后一个一个的将其加入内存工作区。