目录
一、外部归并排序
二、败者树
三、置换选择排序
四、最佳归并树
一、外部归并排序
16个块,先每个块读入内存进行排序在输出回来,进行16次读和16次写
两两归并,第一趟如下
在两两归并
时间分析
外部排序时间开销=读写外存时间+内存排序时间+内部归并时间
对r个初始归并段,做k路归并,则归并树可用k叉树表示,若树高为h,则归并趟树
推到:k叉树第h层多有个结点,则满足,
初始归并段数量=文件总共记录/内存可容纳记录 r=n/l
加快速度方法
k增加(缓冲区个数增加):多路平衡归并,问题会每次比较大小次数太多
r减小(缓冲区大小增加) :构建更长初始归并段
二、败者树
k增加,减少每次比对次数
有了败着树,选出最小元素,只对比灰色每层就行,比对次 =h-1
三、置换选择排序
r减少,构造更长初始归并段
按增序,开始读取3个记录,最小的(4)置换出去,并MINXMAX=4,,读取下一个,在获取最小的值是否小于MINXMAX,小于放入归并段1后面,
如果大于定死这个(下次都不看),就获取下一个最小的值并大于MINXMAX的(14)置换出去后面,并更新MINXMAX14,然后继续置换,
直到3个位置的比 MINXMAX小,就重新一个归并段,在继续前面的置换流程一直结束
四、最佳归并树
哈夫曼树构建
n路归并注意最后不满n路