数据结构(九)——外部排序之外排序

本文详细介绍了数据结构中的外部排序,包括置换排序的两种理解方式,二路归并法的实现过程,以及多路归并中的胜方树和败方树策略。此外,还探讨了最佳归并树的构建,类似于Huffman树的构建过程,并解释了如何根据初始顺串数量确定是否需要添加虚设结点来构建最佳归并树。

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

本博客基于对mooc中的《北京大学-数据结构与算法》及《西北大学-数据结构》的理解进行编写

置换排序

基于《西北大学-数据结构》置换排序的理解

在这里,我们先假设:1.输入文件FI为:21,11,09,02,16,31,20,01,27,05,13,28 。2.工作区WA 容量m = 3 。3.输出文件为FO

  • 首先,我们从 FI 中读取三个数据进入 WA 。分别是 21,11,09
  • 选取 WA 中最小的值输出,再从 FI 中读入数据。输出 09 ,读入 02.
  • 从 WA 中比前一个输出大的最小的值输出,再从 FI中读入数据。这时 WA 中为 21,11,02 输出 11,读入 16.
  • 重复以上的第三个步骤,直到 WA 中数据不满足第三的步骤时,再将以上步骤重新进行一次,直到外数据均排序生成初始合并段。以上数据生成两个初始合并段:

09,11,16,21,31
01,02,05,13,20,27,28

基于《北京大学-数据结构与算法》置换排序的理解

在这里,采用的方法和上面西北大学的相似,但更加具体,用到了数据结构中的堆

  • 首先向输入文件中读取一定量的数据,生成最小堆
  • 再向输入文件中读取一个数据,与堆顶数据比较
  • (1)当输入的数据大于堆顶的数据时,将堆顶的元素输出,输入的数据占领堆顶位置,对最小堆进行调整
  • (2)当输入的数据小于堆顶的数据时,将堆顶的元素输出,输入的数据和堆最低的数据互换,从堆中移除,堆的规模缩小1.
  • 重复以上步骤,直至堆的规模为0,再重新开始

二路归并法

  • 输入缓冲区:两个页块 输出缓冲区:一个页块
  • 过程:输出缓冲区的数据进行归并后送入输入缓冲区
  • 输出缓冲区满:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值