数据结构day5——外排序

1.外排序

对磁盘上的记录进行排序。

可用办法:

1)使用虚拟存储,把整个文件读入虚拟存储中,然后允许内排序算法。问题在于虚拟存储大小有限制,磁盘上的文件过大的话可能无法放到虚拟存储中去。

解决办法是利用缓冲池管理技术,克服虚拟存储大小的限制。

2)调整内排序算法使之应用于外排序

3) 置换选择算法

在内存中开辟一部分作为数组,存放从磁盘中读出的一个块。假设这个块中有m条记录,根据这m条记录建立最小值堆;接下来不断重复下面的步骤直到数组为空:,将堆的根结点(最小值)输入到输出缓冲区,如果输入缓冲不为空,按序取一条记录,如果该记录比刚刚送到输出缓冲中的记录大,则此记录设置为根结点,再进行下调,保持堆序;否则,将数组末尾的记录代替根结点,新输入的记录则放到数组的末尾,且Last指针减去1.再将根结点下调保持一定的堆序(last指针减去1的原因是末尾的新记录因为太小,已经不是顺序的了,也就是说刚刚输出的比他大,所以暂时不参与堆序)。

这种算法至少可用保证输出的顺串的长度最小是M,因为最初建立的M个记录的堆能够顺利输出。最坏的可能就是之后输入的记录全部逆序,这样就只有M长度的顺串了。

2.多路归并,减少扫描次数

外部排序的第二阶段,就是对第一阶段获得的顺串进行归并。

一般情况下所进行的二路归并,如果有R个顺串,则需要归并logR次。

x路归并与二路归并相似,对与x个顺串,查看每个顺串的首元素,从中取出最小的一个进行输出。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值