外部排序总结

本文详细介绍了外部排序的过程,包括生成顺串、归并顺串的步骤,并探讨了生成顺串的优化策略——选择置换算法,以及多路归并的优化方法,如堆、胜者树和败者树的应用,旨在减少外存访问次数和提高排序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:文件存储在磁盘上,假设内存容量为m,待排序文件容量为M,M>m

步骤:

1.生成顺串
    每次读入m长度文件内容,使用内部排序,有序后输出到文件,总共生成大约M/m个中转文件
2.归并顺串
    使用M/m路的归并将M/m个文件的内容归并,步骤如下:

     产生M/m+1个缓冲区,M/m个为每个输入文件的缓冲区,一个为输出文件缓冲区,然后M/m路归并(归并过程如图所示)写入输出缓冲区,输出缓冲区满则写文件,输入缓冲区空则再次读入。一般归并不会一次对所有的中转文件归并,而是执行多次k路归并。

分析:k路归并,每次需要比较遍历k个数选择出最小的值复杂度为O(n)


生成顺串的优化
    使用选择置换算法生成顺串可以在有限的内存下生成大概两倍于内存的顺串,因此会产生更少的待归并中转文件。

选择置换算法:

        假设:内存容量为m,待排序文件容量为M,从小到大排序
  (1)从输入文件读取容量m的内容将可用内存填满  
  (2)读入内容构建最小堆
  (3)重复以下步骤到堆大小变为0:
           a. 把根结点的数字A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值