排序之外部排序

有时,待排序的文件很大,计算机内存不能容纳整个文件,这时候对文件就不能使用内部排序了(这里做一下说明,其实所有的排序都是在内存中做的,这里说的内部排序是指待排序的内容在内存中就可以完成,而外部排序是指待排序的内容不能在内存中一下子完成,它需要做内外存的内容交换),外部排序常采用的排序方法也是归并排序,这种归并方法由两个不同的阶段组成:

1、采用适当的内部排序方法对输入文件的每个片段进行排序,将排好序的片段(成为归并段)写到外部存储器中(通常由一个可用的磁盘作为临时缓冲区),这样临时缓冲区中的每个归并段的内容是有序的。

2、利用归并算法,归并第一阶段生成的归并段,直到只剩下一个归并段为止。

例如要对外存中4500个记录进行归并,而内存大小只能容纳750个记录,在第一阶段,我们可以每次读取750个记录进行排序,这样可以分六次读取,进行排序,可以得到六个有序的归并段,如下图:

每个归并段的大小是750个记录,记住,这些归并段已经全部写到临时缓冲区(由一个可用的磁盘充当)内了,这是第一步的排序结果。

完成第二步该怎么做呢?这时候归并算法就有用处了,算法描述如下:

1、将内存空间划分为三份,每份大小250个记录,其中两个用作输入缓冲区,另外一个用作输出缓冲区。首先对Segment_1和Segment_2进行归并,先从每个归并段中读取250个记录到输入缓冲区,对其归并,归并结果放到输出缓冲区,当输出缓冲区满后,将其写道临时缓冲区内,如果某个输入缓冲区空了,则从相应的归并段中再读取250个记录进行继续归并,反复以上步骤,直至Segment_1和Segment_2全都排好序,形成一个大小为1500的记录,然后对Segment_3和Segment_4、Segment_5和Segment_6进行同样的操作。

2、对归并好的大小为1500的记录进行如同步骤1一样的操作,进行继续排序,直至最后形成大小为4500的归并段,至此,排序结束。

可以用一个图示表示上述算法的归并效果:

以上对外部排序如何使用归并算法进行排序进行了简要总结,提高外部排序需要考虑以下问题:

1、如何减少排序所需的归并趟数。

2、如果高效利用程序缓冲区,使得输入、输出和CPU运行尽可能地重叠。

3、如何生成初始归并段(Segment)和如何对归并段进行归并。

 

转载于:https://www.cnblogs.com/codeMedita/p/7425291.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang——Json的序列化和反序列化

JSON: JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写…

安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)

上一节我们部署了 etcd,本节安装和配置 flannel。 build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build。不过用于做 build 的 docker 镜像托管在 gcr.io,国内可能无法直接访问&a…

人人都是产品经理?

产品经理顾名思义就是产品经理。那么只要搞懂产品是什么、经理又什么什么,就明白了产品经理是什么。 产品是什么: 产品是满足需求的载体,能被市场、人们使用和消费,并能满足人们某种需求(创造价值)的任何东…

搭建一个简单的FTP服务器

本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主要是对新的操作系统还不是很熟悉。相信用…

3D文档(BRD、MRD、PRD)怎么写

3D文档: 一般来说,BRD作为战略方向的制定,是最早产出的文档,而MRD则是在战略方向的基础上对市场进行的分析,同时对后续工作的方向进行一些说明和指导,也可以说是通过对市场环境、竞品的分析,明确…

需求收集、分析、管理的方法

需求: 什么是需求 百度百科给的解释:指人们在某一特定的时期内在各种可能的价格下愿意并且能够购买某个具体商品的需要。所以要想明白需求,还要明白另外两个概念,需要和欲望,因为从需要到需求是一个由宏观到微观的过程…

if函数 字体自动标红_发喜糖!REPT函数和图表订婚了~~

小伙伴们早上好呀!今天为大家分享的是REPT函数的应用实例。案例1:基础用法左右:按照给定的次数重复显示文本用法:REPT(文本,重复次数)搭配:Wingdings字体家族的应用案例2:条形图⑴ 单元格D3输入…

用户体验五要素

用户体验: 用户在使用产品过程中建立起来的一种纯主观感受。 用户体验的重要性: 会失去客户:如果你没有良好的体验,用户不会使用你的产品,而且产品很难有二次机会接触用户。会增加获客成本:获客成本越来越高…

trackingmore快递查询平台_国际快递物流信息追踪查询

以下是快递公司常用查询物流信息追踪平台1. 17TRACK查询网址:www.17track.net/zh-cn (强烈推荐,国际件都能查询)2. EMS查询网址:www.ems.com.cn 客服电话:11833. DHL网址查询:www.cn.dhl.com …

竞品分析该怎么做

竞品分析: 作用: 知己知彼,百战不殆。为自身产品设计提供功能、可用性、关键技术等方面的参考。提高自身产品的差异化程度。为新立项的产品、拍脑袋想出来的,降低风险。 如何选择竞品: 行业内领先的产品,通…

饿了么超时20分钟_饿了么回应“多等5分钟”,网友气炸了

广告记编辑整理(ID:adgroup)昨天一篇题为《外卖骑手,困在系统里》的文章刷屏文章指出外卖骑手是被平台系统算法与数据支配的“工具人”在系统的压迫下骑手们每天都在违反交规、与死神赛跑外卖员成了高危职业引发网友热议今天凌晨饿了么官方发布了一篇《你…

java获取本周的开始时间和结束时间_创业板注册制开始时间/股票开户流程结束后,怎么炒股?...

股户流程刚走完,先别急着炒股,多研究股市行情。首选开户选好券商,没选好后患无穷,券商建议是富途、老虎,这两家美股港股都可以入,各有优势,富途的港股股票期权值得关注,老虎证券目前…

MarkDown 中使用 LaTeX 数学式

 最近看了些机器学习的书籍, 想写点笔记记录下. 由于需要使用到很多的数学推导, 所以就看了下如何在 Markdown 中插入数学式,发现在 Markdown 中可以直接插入 LaTeX 数学式. 排版数学公式是 \(\TeX\) 系统设计的初衷, 在 \(\LaTeX\) 中占有特殊地位, 是…

信息架构、结构图、流程图

互联网信息架构: 信息架构的本质就是分类!按照一定的规则,对产品的功能和内容进行组织,在功能确定的情况下,合理地设置和摆放,建立尽可能短的使用路径。目的就是为了更高效的满足用户的使用需求。如不进行信…

api商品分享源码_谈谈微服务中的 API 网关(API Gateway)

在本篇文章中,我们就一起来探讨一下 API 网关在整个微服务分布式架构中的一个作用。# 背景我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有…

Docker(4)-容器互联与端口映射

容器互联 默认情况下,容器都是各自独立运行,与世隔绝。 Docker提供了一个名为docker0的虚拟网桥,它会为每个相连的容器分配一个虚拟子网。但是尽管容器都连在同一个虚拟网桥上,如果没有额外的配置,它们还是不能够相互通…

设计规范-导航、弹窗、视图

常见导航样式: 根据产品的特性,导航可以混合使用,体现形式多样化。 不能为了追求多样化,滥用导航类型。 扁平式导航: 在一级页面提供导航栏,一般处于顶部/底部,适合频繁切换的模块&#xff0c…

f3arra1n3.4.1版本_GDB 10.1版本发布了

更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)GDB的10.1版,即GNU调试器,现已发布。GDB是Ada,C,C ,Fortran,Go,Rust等许多源代码级的调试器。GDB可以定位(调试正在运行的程序…

使用密钥登录CentOS系统(基于密钥的认证)

在Window客户端有多种软件可以登陆ssh,比如putty,xshelll,secureCRT,我就以xshell为例设置使用公钥和私钥验证登陆服务器。 使用Xshell密钥认证机制远程登录Linux 1、使用xshell生成公钥 Key Type 选择RSA (SSH1只支持…

华为8545m5补全shell_华为hs8145v5 改华为界面和默认超密(一)

重点从电信界面改华为界面要点:修改配置文件必须要有 Root 权限,也就是要能登陆 Telnet 和补全 Shell 。开 Telnet 方法:1.需要有超密,登陆到电信管理页面,打开 Telnet 选项。在后台页面点击“安全”--->“ONT访问控…