首页 > 其他分享 >【数据结构】排序 外部排序

【数据结构】排序 外部排序

时间:2023-08-22 16:34:28浏览次数:32  
标签:归并 数据结构 外部 外存 内存 缓冲区 排序

外部排序不会考算法设计,考相关的概念和排序方法过程等。

1.外部排序的基本概念

外部排序是指对于记录很多的大文件进行排序时,无法将其完全复制进内存中进行排序,因此需要将外存中的待排记录一部分一部分地调入内存中进行排序,在排序过程中需要进行多次内存外存之间的交换,这种排序方法就称为外部排序。

2.外部排序的方法

文件在磁盘中通常是按块存储的,而磁盘读写所需时间远远超过内存运算的时间,所以外部排序中的时间代价主要由访问磁盘的次数(I/O次数) 决定。

外部排序的两个阶段:
1.根据内存缓冲区能容纳的大小,将外存上的待处理大文件分成若干个子文件
依次将子文件读入内存并在内存中进行内部排序,再将排序结果重新写回外存。这里称这些已经有序的子文件为归并段或顺串
2.对这些已经有序的归并段进行逐趟归并,直至整个文件有序为止。
对归并段进行归并排序时,仍然需要在内存中进行,这时该如何处理?
对于两个归并段R1和R2,将内存分为三个缓冲区:两个输入缓冲区和一个输出缓冲区,每次将R1和R2的一部分放入两个输入缓冲区,进行归并排序,每当输出缓冲区满则从输出缓冲区读入外存中,当输入缓冲区中的一个空了时,则从外存中对应归并段中再读入,直到最终将两个归并段都排序完。


外部排序的总时间 = 内部排序所需时间 + 外存信息读写的时间 + 内部归并所需时间。

可以通过增大归并路数k,或减少初始归并段的个数r,来减少归并的趟数,从而减少读写磁盘的次数。

3.多路平衡归并与败者树

当增大归并路数和减少初始归并段个数时,又会使内部归并所需的时间增加,使得减少I/O次数带来的效益打折扣,所以这里想到使用其他的内部归并排序算法。

标签:归并,数据结构,外部,外存,内存,缓冲区,排序
From: https://www.cnblogs.com/satsuki26681534/p/17648894.html

相关文章

  • Java8实现联合排序
    Comparator<MyObject>combined=Comparator.comparing(MyObject::getField1,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getField2,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getF......
  • JVS低代码中表单引擎与逻辑引擎是如何联合调用外部API的?
    在企业项目中,常常出现需要给外部系统提供一个api,让外部系统触发调用,本系统直接数据入库,那么我们来看看jvs的表单引擎与逻辑引擎联合实现这个功能,先看实现效果:配置步骤:一、配置列表页如下图所示:①选中需要增加列表页的目录,在目录操作的主界面上②点击创建列表页设计,系统进入列表页......
  • python 外部文件调用Django程序操作model
    importosimportdjango#设置Django配置文件文件夹所在位置,并进行系统环境配置os.environ.setdefault("DJANGO_SETTINGS_MODULE","项目配置文件夹名称.settings")#加载Django模块,初始化Django环境django.setup()#导入需要调用的modelfrom应用名称.modelsimport......
  • 「Note」数据结构方向 - 数据结构进阶
    1.平衡树咕咕咕2.树套树咕咕咕3.LCT3.1.介绍3.1.1.基本概念LCT全名Link-Cut-Tree,动态树,是用来维护动态森林的数据结构。它支持以下操作(需要保证任意操作时刻维护的都为森林):连边。断边。换根。提取路径信息。LCT的大体思路是将每棵树拆分为若干条链,并用平衡......
  • 【数据结构】排序 内部排序算法的比较和应用
    1.简单复习一下前面学到的排序算法三种插入排序:直接插入:依次将后面无序序列中头部的元素插入前面的有序序列中(找到插入位置,这个位置后面的元素一律后移)折半插入:相比直接插入只是用折半查找的方式查找插入位置,元素的移动操作不变希尔排序:把相隔一定步长d的元素放入一个子表......
  • VUE element-ui之table表格全局排序
    一调用后端接口排序功能步骤:标签中定义排序方法:<el-tableref="reset"v-loading="loading":data="tableData"height="520"border@sort-change="sortChange">要排序的字段......
  • 排序算法
    1.常用排序1.1归并排序1.2快速排序快速排序优化1.3堆排序2.低级排序2.1冒泡排序2.2直接插入排序2.3希尔排序3.基于比较的排序算法时间复杂度下限证明4.排序算法会出现不稳定的状态原因5.非比较排序5.1计数排序5.2桶排序5.3基数排序6.思考:有没有办法......
  • H.265网页播放器EasyPlayer外部录像接口开放的方法
    EasyPlayer通过实现视频实时录像功能,不仅提供轻量化、便捷化的视频资源下载能力,同时有效减少了带宽和计算资源的消耗。这种创新的功能使得用户可以灵活地获取所需的视频数据,为其节省使用成本并提升整体效率。今天我们来分享一下EasyPlayer播放器对外开放录像的方法。1)在播放器内部......
  • 数据结构-堆排序
    java实现堆排序算法源代码publicclassHeapSortextendsDataCrol{privatevoidheapify(intA[],inti,intsize){//从A[i]向下进行堆调整intleftChild=2*i+1;//左孩子索引intrightChild=2*i+2;//右孩子索引intmax=......
  • 数据结构-希尔排序
    java实现希尔排序算法源代码publicclassShellSortextendsDataCrol{@Overridepublicvoidsort(int[]array){inth=0;intsize=array.length;while(h<=size){//生成初始增量h=3*h+1;}//......