8-14外部排序-置换选择排序

效果:
构造更长的初始归并段
初始归并段的数量尽可能的少

以前的办法:
若文件共有n个记录,每个初始归并段只能包含l个记录(用于内部排序的内存工作区WA可容纳l个记录),则初始归并段数量r=n/l

现在的办法:
尝试构建一个比内存工作区更大的初始归并段

在这里插入图片描述
一个缓冲区能存放3个元素,用于内部排序的内存工作区也只能容纳3个记录

将4、6、9放入输入缓冲区,依次处理
在这里插入图片描述
构造递增的归并段
用变量MINIMAX记录当前最小元素,此时MINIMAX=4,将4号放入输出缓冲区,凑足3个一起发往输出文件FO(读写磁盘必须以磁盘块为单位)(输出文件FO存放在磁盘中)

以下忽略缓冲区演示
在这里插入图片描述
7号填补,最小6,MINIMAX改为6,6输出

直到当前内存工作区WA的最小元素10<MINIMAX=13
此时若把10输出,大于归并段中最大元素13,不满足要求
因此冻结10
在这里插入图片描述
选择下一个最小且大于MINIMAX的元素14,将MINIMAX改为14,14输出
在这里插入图片描述
最小且大于MINIMAX的元素16,将MINIMAX改为16,16输出
在这里插入图片描述
在这里插入图片描述
以此类推,直到3个都冻结,归并段1结束

将3个元素解冻,同样的方式构造第二个归并段
在这里插入图片描述
19输入,选择最小且大于MINIMAX的元素3,MINIMAX改为3,输出3
在这里插入图片描述
以此类推,直到处理完所有元素
在这里插入图片描述
通过置换-选择排序,可以超过内存工作区的限制,从而构造记录更长,数量更少的归并段,使得归并趟数减小,读写磁盘次数减少,效率更高。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡__卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值