数据结构---外部排序

外部排序是处理大量数据时,由于内存限制,数据需要在外存中进行排序的过程。主要分为预处理(生成顺串)和合并排序两步。二路合并排序是最简单的方式,通过多次归并减少IO操作。多路归并可进一步提高效率,尤其是使用败者树进行最小值选择,能降低比较次数。败者树在重构过程中只需要与其父节点比较,简化了流程。
摘要由CSDN通过智能技术生成

外部排序

外部排序:由于计算机内存有限,当数据量过大时,数据不能一次性加载到内存中,数据保存在外存中(硬盘,文件里面)上,(寄存器>Cache>内存>固态硬盘>机械硬盘),限制外部排序效率的是IO(读写)的效率。如果要提高外部排序的效率,就要减少IO次数。

一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为顺串(run),顺串生成后即将其写入外存。这样在外存上就得到了m个顺串(m=[n/t])。最后,对这些顺串进行归并,使顺串的长度逐渐增大,直到所有的待排序的记录成为一个顺串为止。

思路:

在这里插入图片描述
上面的是4路归并

(1) 二路合并排序
二路合并是最简单的合并方法,合并的实现与内排序中的二路归并算法并无本质区别,下面通过具体例子,分析二路合并外部排序的过程。

有一个含有9000个纪录的文件需要排序(基于关键字)。假定系统仅能提供容纳1800个纪录的内存。文件在外存(如磁盘)上分块存储,每块600个纪录。外部排序的过程分为生成初始顺串和对顺串进行归并排序两个阶段。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HOVL_C++

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

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

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

打赏作者

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

抵扣说明:

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

余额充值