【漫画】什么是外部排序?

排序算法-四种常用外部排序算法 ① 最多只能有k个段归并为一个;② 每一趟归并中,若m个归并段参与归并,经过这一趟处理得到[m/k]个新的归并段。 阅读详情

公众号来源:苦逼的码农  作者:帅地

通过漫画的方式通俗易懂讲解什么是外部排序,建议阅读!

背景

西天取经的路上,一样上演着编程的乐趣.....

640

640


640

地哥笔误:40亿字节不是占8G,而是大概占16G

640

640

640

640

排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为有序子串吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。


640

注意:读取的时候是每次读取一个int数,通过比较之后在输出。


按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。


640

640

640


接下来把12个数据分成4份,然后排序成有序子串


640


然后把子串进行两两合并


640


输出哪个元素,就在那个元素所在的有序子串再次读入一个元素


640


继续


640


重复直到合并成一个包含6个int的有序子串


640


再把两个包含6个int的有序子串合并成一个包含12个int数据的最终有序子串


640

640


优化策略


640

解释下:例如对于数据2,我们把无序的12个数据分成有序的4个子串需要读写各一次,把2份3个有序子串合并成6个有序子串读写各一次;把2份6个有序子串合并从12个有序子串读写各一次,一共需要读写各3次。


640


640


640


多路归并


为了方便讲解,我们假设内存一共可以装4个int型数据。

 

640


640


640


640


640

640


640


置换选择


640


640


640


640


640


640


640


例如我们可以从12个数据读取3个存到内存中,然后从内存中选出最小的那个数放进子串p1里;


之后再从在从剩余的9个数据读取一个放到内存中,然后再从内存中选出一个数放进子串p1里,这个数必须满足比p1中的其他数大,且在内存中尽量小。


这样一直重复,直到内存中的数都比p1中的数小,这时p1子串存放结束,继续来p2子串的存放。


ps:我看的时候没看懂为啥有上面几条规则,于是跑去问了一下地哥。地哥的回答:在构造一个子串的时候,因为我们必须保存字串是“有序”的,所以我们从内存中选出的数,必须要比“上一次”选的数小。


例如(这时假设内存只能存放3个int型数据):


12个无序的int数据


640


读入3个到内存中,且选出一个最小的到子串p1


640


从内存中再次读取一个元素86


640


从内存中再次读取一个元素3


640


从内存中再次读取一个元素24


640

从内存中再次读取一个元素8


640


这个时候,已经没有符合要求的数了,且内存已满,进而用p2子串来存放,以此类推。


通过这种方法,p1子串存放了4个数据,而原来的那种方法p1子串只能存放3个数据。


640


640

(不知道堆排序的可以看下我之前写的文章:【算法与数据结构】堆排序是什么鬼?)


从12个数据中读取3个数据,构建成一个最小堆,然后从堆顶选择一个数写入到p1中。


之后再从剩余的9个数中读取一个数,如果这个数比刚才那个写入到p1中的数大,则把这个数插入到最小堆中,重新调整最小堆结构,然后在堆顶选一个数写入到p1中。


否则,把这个数暂放在一边,暂时不处理。之后一样需要调整堆结构,从堆顶选择一个数写入到p1中。


这里说明一下,那个被放在一边的数是不能再放入p1中的了,因为它一定比p1中的数都要小,所以它会放在下一个子串中


看这些文字会让人头大,我画图解释下吧。


从12数据读取3个数据


640


构建最小堆,且选出目标数


640


读入下一个数86


640


读入下一个数3,比70小,暂放一边,不加入堆结构中


640


读入下一个数据24,比81小,不加入堆结构


640


读入下一个数据8,比86小,不加入堆结构。此时p1已经完成了,把那些刚才暂放一边的数重新构成一个堆,继续p2的存放。


640


以此类推...

最后生成的p2如下:


640


640


640


640


640


这种方法适合要排序的数据太多,以至于内存一次性装载不下。只能通过把数据分几次的方式来排序,我们也把这种方法称之为外部排序


640

640


- End -


推荐阅读:

TensorFlow读写数据
为什么有些网站域名不以www开头?什么是二级域名?

乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

640?wx_fmt=jpeg

有帮助?好看!转发!640

软件设计师---UML 阅读详情

相关推荐

手把手带你搞懂电压跌落测试DIP

砖一用4分钟时间手把手带你搞懂电压跌落测试DIP,希望对你有用~

qq_45508321的博客 7918

4g数据需要排序计算机内存,20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...

有一道流传广泛的面试题:给你一台 4G 内存的机器,一组 20 亿个无序正整数,如何快速地判断一个正整数 N 是否在这组数字中?或者如何快速地对这组数据排重后排序?让我们先算算 20 亿个整数会占用多大的内存空间,Java 的 int 类型占用 4 个字节,那么 20 亿 * 4 再换算成 G 大约是 7.5G,大于题目中 4G 内存的限制,无法一次性地放到内存中;这时候有些伙伴会说:“把数据放到...

weixin_39637059的博客 415

SAP FICO 银企直联实战:从配置到异常处理的全流程解析

本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。

weixin_29215815的博客 663

数据结构---排序算法总结(外部排序)

1. 很久以前没有胭脂,女子的脸只为情郎红。 2. 世界如此广阔,你却走进了悲伤的墙角 1. 排序: 2. 插入排序 2.1. 直接插入排序 2.2. 折半插入排序 2.3. 希尔排序 3. 交换排序 3.1. 冒泡排序 3.2. 快速排序 4. 选择排序 4.1 简单选择排序 4.2 堆排序 5. 归并排序和基数排序 6. 各种内部排序算法的比较及其应用 7. 外部...

~星空任我游~ 3647

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1116

C# WinForms实战:5分钟用ScottPlot打造专业级示波器界面(附完整代码)

本文详细介绍了如何在C# WinForms应用中,利用ScottPlot.WinForms库快速构建一个专业级的软件示波器界面。通过从环境配置、静态波形绘制到动态数据实时更新的完整实战演示,帮助开发者高效实现高性能的波形显示功能,适用于工业监控、信号分析等多种场景。

weixin_29198045的博客 831

20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap

作者 l 会点代码的大叔(CodeDaShu)有一道流传广泛的面试题:给你一台 4G 内存的机器,一组 20 亿个无序正整数,如何快速地判断一个正整数 N 是否在这组数字中?或者如何...

架构师小秘圈 942

iPhone存储空间耗尽自救指南:从“白苹果”死锁到成功保数据刷机

本文详细介绍了iPhone存储空间耗尽导致'白苹果'死锁的解决方案,通过保留数据刷机方法成功恢复设备运行。文章分享了从失败尝试到最终成功的完整流程,包括关键操作步骤和预防措施,帮助用户在紧急情况下保住重要数据。

weixin_32578161的博客 290

漫画:什么是外部排序?

排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。注意:读取的时候是每次读取一个int数,通过比较之后在输出。按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。接下来把12个数据分成4份,然后排序成有序子串然后把子串进行两两合并输出哪个元素,就在那个元素所在的有序子串再次读入一个元素继续重复直到合并成一个包含6个int的有序子串。

帅地 485

ENVI新手避坑指南:手把手教你搞定遥感影像的坐标系转换(附ArcGIS对比)

本文详细解析ENVI与ArcGIS在遥感影像坐标系转换中的关键差异与实战技巧,特别针对新手常见问题提供避坑指南。从基础概念到高级操作,涵盖定义投影、UTM转换等核心步骤,并对比两种软件的处理精度与效率,帮助用户高效完成遥感影像处理任务。

weixin_42531925的博客 378

MIKE水动力笔记7_实测数据与模型输出结果的拟合对比

上一博文【MIKE水动力笔记6】主要讲解如何自己制作实测数据的时间序列文件dfs0,而本博文讲解如何进行实测数据与模型输出结果的拟合对比。

晏长街的博客 1万+

漫画: 什么是外部排序?

西天取经的路上,一样上演着编程的乐趣.....                     排序的时候我们可以选择快速排序或归并排序等算法。    为了方便,我们把排序好的2G有序数据称之为有序子串吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。             按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。               ...

zhangge3663的博客 1636

ISP算法:自动白平衡(AWB)

1. 为什么要做白平衡? 人类视觉系统具有颜色恒常性特点,一次人类对物体观察不受光源影响。但是Sensor在不同光线下,物体呈现的颜色不同,在晴朗天空下会偏蓝,在烛光下会偏红。如图: 2.什么是自动白平衡? 为了消除光源对于图像传感器成像的影响,模拟人类视觉系统的颜色恒常性。保证在任何场景下看到的白色是真正的白色。 3. 如何做自动白平衡? 只要乘以一个对角矩阵,便可以进行白平衡...

a200800170331的专栏 1万+

漫画算法:什么是外部排序?

背景 西天取经的路上,一样上演着编程的乐趣..... 排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为有序子串吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。 注意:读取的时候是每次读取一个int数,通过比较之后在输出。 按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。 接下来把12个数据分成4份,然后排序成有序子串 然后把子串进行两两合并...

绝圣弃智-零的博客 252

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【排序算法】【转】09外部排序

【漫画】什么是外部排序? 转载于:https://www.cnblogs.com/apeway/p/10818578.html

weixin_30362083的博客 89

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

原创 | 外部排序:如何用 2GB内存给 20 亿个整数排序?

来源:帅地玩编程作者:帅地、这篇文章在很久很久之前讲过,不过出了些小错误,今天把它修正了,并且从实战 + 漫画的方式带你领略外部排序魅力,并且让你知道外部排序的实现方式没有你想的那么简单...

WantFlyDaCheng的博客 424

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

外部排序:如何用 2GB内存给 20 亿个整数排序?

来源公众号:帅地玩编程作者:帅地、这篇文章在很久很久之前讲过,不过出了些小错误,今天把它修正了,并且从实战 + 漫画的方式带你领略外部排序魅力,并且让你...

azl397985856的专栏 704

java怎么对几百亿大小的数排序,外部排序:如何用 2GB内存给 20 亿个整数排序?...

从实战 + 漫画的方式带你领略外部排序魅力,并且让你知道外部排序的实现方式没有你想的那么简单。排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为有序子串吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。注意:读取的时候是每次读取一个int数,通过比较之后在输出。按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。接下来把12个数据分成...

weixin_28901739的博客 352

【漫画+图解】面试官让我用 2GB 内存给 20亿个整数(需要8GB内存)排序,我该咋整??

排序的时候我们可以选择快速排序或归并排序等算法。为了方便,我们把排序好的2G有序数据称之为有序子串吧。接着我们可以把两个小的有序子串合并成一个大的有序子串。 注意:读取的时候是每次读取一个int数,通过比较之后在输出。 按照这个方法来回合并,总共经过三次合并之后就可以得到8G的有序子串。 接下来把12个数据分成4份,然后排序成有序子串 然后把子串进行两两合并 输出哪个元...

帅地 2万+

归并排序比较次数_排序算法-漫画集

内部排序与外部排序概念内部排序:带排序记录放在计算机的内存中进行排序的过程。外部排序:待排序记录的数量很大,以致于内存不能容纳全部记录,所以在排序的过程中,需要对外存进行访问的排序过程。两者区别:内部排序主要是比较的次数作为衡量效率的标准,外部排序中,还要考虑IO次数作为效率的衡量因素。内部排序包括常见的冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序等。1.内部排序 漫画集漫画:什么是冒...

weixin_39797758的博客 390

哔咔漫画下载器终极指南:3步打造永久个人漫画库

你是否曾因网络不稳定而无法流畅阅读漫画?是否担心心爱的漫画作品突然下架消失?哔咔漫画下载器正是你需要的解决方案。这款开源的多线程漫画下载工具通过本地化存储、智能管理和极速下载三大核心功能,让你真正实现漫画自由,随时随地畅享阅读乐趣。本文将为你提供完整的安装使用指南,从零开始打造个人永久漫画库。 ## 🚀 为什么你需要这款哔咔漫画下载器? ### 传统漫画阅读的三大痛点 **网络依赖问题**

gitblog_00026的博客 2万+

终极漫画管理工具:让本地漫画整理变得简单高效

exhentai-manga-manager是一款专为漫画爱好者打造的本地漫画标签管理阅读应用,它能帮助你轻松整理、管理和阅读从ExHentai下载的短篇漫画,让漫画收藏不再杂乱无章。 ## 为什么选择exhentai-manga-manager? 对于漫画爱好者来说,随着收藏的漫画越来越多,如何高效管理这些漫画就成了一个难题。exhentai-manga-manager应运而生,它以标签化管

gitblog_00692的博客 1068

漫画:什么是选择排序?

选择排序是一种简单直观的算法,今天我们聊聊选择排序的思想,代码以及复杂度。

帅地 814

Mihon漫画阅读器:如何打造你的个性化数字漫画收藏库

在数字阅读时代,漫画爱好者面临着一个共同的挑战:如何在多个设备上统一管理自己的漫画收藏,同时保持阅读进度的同步?Mihon作为一款免费开源的Android漫画阅读器,为这个问题提供了优雅的解决方案。它不仅仅是一个阅读工具,更是一个完整的漫画生态系统,让你能够轻松管理本地漫画文件、追踪阅读进度,并在不同设备间无缝切换。 ## 从本地文件到智能图书馆:Mihon的漫画管理哲学 你是否曾经因为漫画文

gitblog_00841的博客 912

3步掌握Venera漫画源配置:从零打造个性化漫画阅读生态

Venera是一款强大的漫画阅读应用,通过JavaScript漫画源配置机制,让你能够访问全网漫画资源。无论你是技术爱好者还是普通用户,只需简单配置即可将多个漫画网站的内容整合到统一界面中,享受海量漫画资源和流畅的阅读体验。本文将为你提供完整的配置指南,解决漫画源添加与管理中的实际问题。 ## 核心要点 - **核心关键词**:Venera漫画源配置、JavaScript漫画源、漫画阅读应用 -

gitblog_01049的博客 606
上一篇: HTTP就是这么简单(修订版)
下一篇: Java锁?分布式锁?乐观锁?行锁?
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值