外部表读取速度_C语言必学的12个排序算法:外部排序算法(第12篇)

2692a4d76bea8184d6384dd07ea7e8fb.gif

「今天是学习C语言第 142 天」

纸上学来终觉浅,绝知此事要躬行。——  陆游「冬夜读书示子聿」

# 基本思想

外部排序是针对文件数据进行排序,当数据记录非常大时,例如10G大小的数据,远远大于内存容量,无法整个加载到内存中直接使用内部排序,因此需要使用外部排序进行排序。

外部排序典型的算法是归并排序,基本原理和前面文章的内部归并排序类似,区别是外部归并排序涉及文件的读写操作,需要首先将初始保存数据的大文件分为多个初始归并段,这些归并段足够小,可以通过加载到内存进行内部排序得到。最终将这些归并段进行归并,得到一个有序的完整文件。

备注:外部排序对于C语言初学者只需要掌握基本概念即可,了解大数据量文件化整为零进行排序的基本思想。

# K-路归并排序

对初始归并段可以采用两两归并、三三归并等,这些可以称为2-路归并、3-路归并、4-路归并。

以两两归并为例,2-路归并排序的过程,可以描述如下:

1.给定10G大小的无序整型数据文件data.txt,计算机内存大小2G, 需要进行数据排序。

2.可以将10G大小的数据文件分为10个1G大小的数据,分10次加载到内存。

3.每次对加载到内存的1G大小的数据,选择合适的一种内部排序算法进行排序,排序完成以后保存到单独的一个子文件中,可以形成data1.txt,data2.txt...,data10.txt 10个1G大小的数据子文件,每个子文件可以称为有序的归并段。

4.使用2路归并排序,每次打开两个文件,不能一次性读入,逐个读取对应文件的数据,比较以后,逐个输出到新的有序子文件中。这样10个1G的有序子文件,最终形成5个2G大小的有序子文件。

5.同样的过程,继续,最终形成1个10G大小的有序子文件。

# 算法分析

1.外部排序算法时间主要是花费在硬盘读取上,硬盘速度比内存速度低数量级,因此可以使用多路归并排序,减少硬盘读取次数优化性能。

2.外部归并排序算法与内部归并排序算法相比,主要涉及文件读写操作,初学者只需要掌握基本原理和概念就行,在遇到大数据量排序时,可以化整为零,切分数据逐步进行排序。

3.外部归并排序算法有很多更加高级复杂的算法,例如多路平衡归并排序(胜者树、败者树)算法,这些需要在深入学习数据结构专业课程后方能理解掌握。

---------- End ----------

往期精彩推荐:

一万分钟C语言学习计划:2020开篇

C语言内存管理的两种方式

C89标准库功能简介

C语言链接与存储类型

C语言标准输入输出

C语言入门基本语法

更多请点击公众号历史文章...

8d0519efa06345d8eccd649d352a7a02.png

「喜欢C请赏个 赞08537c2b30685fa45c826cee672db449.png    点击右下角 在看」

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值