数据结构篇_知识点板块_第九章外部排序
数据结构篇为本人考研时所写笔记,包括知识点和编程思想两大板块,笔记内容依据王道数据结构考研书所写,但比书本上知识更加生动形象,愿本篇章能对您有所帮助
九、外部排序
- 基本概念:
① 基本概念:将待排序的记录存储在外存上,排序时再把数据一部分一部分地调入内存进行排序,在排序过程中需要多次进行内存和外存之间的交换
② 外部排序过程中的时间代价主要考虑访问磁盘的次数,即IO次数
③ 为减少平衡归并中外存读写次数所采取的方法:增大归并路数和减少归并段个数
(1) 利用。
(2) 由长度不等的归并段,进行多路平衡归并,需要构造最佳归并树
- 采用的归并排序一般包括两个独立的阶段:
① 根据内存缓冲区大小,将外存上的文件分成若干长度为t的子文件,依次读入内存并利用内部排序方法对它们进行排序(例如在内存中进行2路归并,归并后的对象顺序存放在输出缓冲区中。若输出缓冲区中对象存满,则将其顾序写到输出归并段(R1')中,再清空输出缓冲区,继续存放归并后的对象。若某个输入缓冲区中的对象取空,则从对应的输入归并段中再读取下一块,继续参加归并。如此继续,直到两个输入归并段中的对象全部读入内存并都归并完成为止),并将排序后得到的有序子文件重新写回外存,称这些有序子文件为归并段或顺串(输入/输出缓冲区没有传送用户界面消息的作用,但有产生初始归并段工作区的作用)
② 对这些归并段进行逐趟归并,使归并段(有序子文件)逐渐由小到大,直至得到整个有序文件为止
-
外部排序的总时间=内部排序所需的时间+外存信息读写的时间(”主要矛盾“-优化的主要方向)+内部归并所需的时间
-
优化:
① 多路平衡归并
(1) 基本概念:
(1 最多只能有k个段归并为一个
(2 每一趟归并中,若有m个归并段参与归并,则经过一趟处理得到向上取整(m/k)个新的归并段
(3 建立总的I/O次数最少称为最佳归并书(类似于哈夫曼树)
(2) 代价:
(1 需要增加相应的输入缓冲区
(2 每次从k个归并段中选一个最小元素需要(k-1)次关键字比较(利用败者树(类似于比赛选拔的那样的完全二叉树)增大归并路数(并不是越大越好)从而减少比较次数)
② 减少初始归并段数量r(可利用置换-选择排序增大归并段长度从而减少归并段个数,其作用是用于生成外部排序的初始归并段,不是对外部排序中输入/归并/输出并行处理(因其不是一种完整的生成有序文件的外部排序算法))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南