第八章 排序 十一、外部排序

目录

一、定义

二、例子

三、时间开销分析

四、优化

1、多路归并

优化结果及缺点

2、减少初始归并段数量

五、总结

六、附加


一、定义

  1. 外部排序是一种用于处理大量数据的排序算法,由于数据量太大无法全部载入内存,所以需要将数据分批读取到内存中进行排序,这个过程称为"外部排序"。
  2. 外部排序通常使用两个或多个磁盘文件进行排序,其中一个文件是输入文件,另一个或多个文件是输出文件。
  3. 外部排序使用归并排序或快速排序等算法对数据进行排序,并将排序结果写入磁盘文件。
  4. 外部排序常用于处理大型数据库、搜索引擎索引、大型文件的排序等场景。

二、例子

1、我们要将磁盘内的数据进行升序排序

2、首先将第一个磁盘块和第二个磁盘块放入到输入缓冲区,然后将它们进行内部排序。

排序前

排序后

3、经过内部排序后再将它们放回磁盘块,我们就可以获得一个有序的"归并段"

4、然后再让后面的两个磁盘块进行内部排序

5、重复如此,我们就可以获得8个有序的"归并段",16块有序磁盘块

6、然后我们使用2路归并将归并段1和归并段2进行归并

7、每次挑出最小的数放入输出缓冲区,最后得到一个升序的磁盘块

8、我们将输出缓冲区的数据输出以后,接下来继续按照升序放入输出缓冲区

9、此时输入缓冲区空了,我们就要让最近的的一个磁盘块进来填充

10、继续进行比较输出

11、再次将磁盘块的数据填充进入输入缓冲区

12、重复如此,就完成归并段1和2进行升序排列了

13、每两个归并段都这样归并,我们就从8个有序归并段,缩减成了4个有序归并段

14、同样的,我们将归并段两两进行归并,这样就能将4个有序归并段,缩减成了2个有序归并段

15、再次进行归并,直到剩余一个整体

三、时间开销分析

四、优化

1、多路归并

优化结果及缺点

2、减少初始归并段数量

五、总结

六、附加

相关推荐
午彦琳8 小时前
2026.9.17
数据结构·算法·leetcode
All for pursuit.11 小时前
【链表-9】146.LRU缓存
数据结构·c++·算法·leetcode
彧azz12 小时前
图的最短路径:Dijkstra与Floyd算法
数据结构·笔记·学习
智购科技自动售卖机厂家12 小时前
设备一到夏天就频繁跳闸,从启动电流追到压缩机电容~YH
数据结构·人工智能·python·eclipse
Logic10113 小时前
C语言/数据结构动态规划题解:Kadane算法求最大子数组和——O(n)时间O(1)空间
c语言·数据结构·动态规划·贪心·时间复杂度·算法题·最大子数组和
鹿角片ljp14 小时前
从 Kimi Cyber Reasoning 学习网络安全推理数据集:从 Reasoning SFT 到安全 Agent 数据设计
数据结构·算法
Logic10114 小时前
C语言/数据结构位运算题解:异或XOR找出数据表中的“独特编号“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
wabs66615 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
qianyanwanyv17 小时前
数据结构概念
数据结构