CN109857366B - 基于外存的插入排序方法、系统、设备及存储介质 - Google Patents
基于外存的插入排序方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN109857366B CN109857366B CN201910135667.5A CN201910135667A CN109857366B CN 109857366 B CN109857366 B CN 109857366B CN 201910135667 A CN201910135667 A CN 201910135667A CN 109857366 B CN109857366 B CN 109857366B
- Authority
- CN
- China
- Prior art keywords
- data sequence
- processed
- current
- sequence
- reading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于外存的插入排序方法、系统、设备及存储介质,本发明通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并对当前元素在待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间,同时在外存中将目标数据序列进行折半查找,节省了数据导入内存的时间,提高了数据库的查询速度。
Description
技术领域
本发明涉及数据库应用技术领域,尤其涉及一种基于外存的插入排序方法、系统、设备及存储介质。
背景技术
排序是将任意序列的数据元素或记录重新按关键字顺序排列成有序的序列,有序序列为记录的查找、插入和删除提供了方便,可以有效提高搜索效率。根据待排序记录数量及其在排序过程中涉及的存储器,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在内存中进行的排序过程;另一类是外部排序,指的是待排序记录的数量很大,以至于内存一次不能容纳全部记录,在排序过程中需要将数据分批导入内存进行排序。
目前,无论是内部排序还是外部排序,其排序过程都是在内存进行的,这样既要消耗内存空间又要花费数据导入时间,同样,对于有序序列的查找也都是在内存中进行,大大降低了查找速度。
发明内容
本发明的主要目的在于提供一种基于外存的插入排序方法、系统、设备及存储介质,旨在解决现有技术中排序过程在内存中进行导致内存空间消耗及数据查找速度慢的技术问题。
为实现上述目的,本发明提供一种基于外存的插入排序方法,所述方法包括以下步骤:
读取本地存储的待处理数据序列;
设置待处理数据序列的元素指示器的当前值;
根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
优选地,所述根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
在所述当前值的初始值为2时,通过低位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
优选地,所述根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
在所述当前值的初始值为n-1时,通过高位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素,其中,n为所述待处理数据序列中的记录数;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
优选地,通过下式确定所述记录数:
其中,fsize为所述待处理数据序列的文件大小,size为所述待处理数据序列中每条记录的文件大小。
优选地,所述对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
从所述待处理数据序列中读取所述当前元素对应的前一元素;
根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;
根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
优选地,所述将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列之后,所述方法还包括:
对所述目标数据序列进行折半查找。
优选地,所述将所述对所述目标数据序列进行折半查找,具体包括:
计算所述目标数据序列的当前中位数位置;
根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素;
比较所述当前中位数元素与待查找关键字的大小;
在所述当前中位数元素与所述待查找关键字的大小不相等时,根据预设公式更新所述当前中位数位置,并返回所述根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素的步骤,直至所述当前中位数元素与待查找关键字的大小相等时,查找成功。
此外,为实现上述目的,本发明还提供一种基于外存的插入排序系统,所述基于外存的插入排序系统包括:
数据读取模块,用于读取本地存储的待处理数据序列;
参数设置模块,用于设置待处理数据序列的元素指示器的当前值,所述当前值表示对所述待处理数据序列进行插入排序的当前元素的当前位置;
插入排序模块,用于根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
目标获取模块,用于将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
此外,为实现上述目的,本发明还提供一种外存储设备,所述外存储设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于外存的插入排序程序,所述基于外存的插入排序程序配置为实现所述的基于外存的插入排序方法的步骤。
此外,为实现上述目的,本发明还提供一种存储介质,其特征在于,所述存储介质上存储有基于外存的插入排序程序,所述基于外存的插入排序程序被处理器执行时实现所述的基于外存的插入排序方法的步骤。
本发明通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并对当前元素在待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间,同时在外存中将目标数据序列进行折半查找,节省了数据导入内存的时间,提高了数据库的查询速度。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的外存储设备结构示意图;
图2为本发明基于外存的插入排序方法第一实施例的流程示意图;
图3为本发明基于外存的插入排序方法第二实施例的流程示意图;
图4为本发明基于外存的插入排序方法第三实施例的流程示意图;
图5为本发明基于外存的插入排序方法第四实施例的流程示意图;
图6为本发明基于外存的插入排序系统第一实施例的功能模块图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的外存储设备结构示意图。
如图1所示,该外存储设备可以包括:处理器1001,例如CPU,通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对外存储设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于外存的插入排序程序。
在图1所示的外存储设备中,网络接口1004主要用于与外部网络进行数据通信;用户接口1003主要用于接收用户的输入指令;所述外存储设备通过处理器1001调用存储器1005中存储的基于外存的插入排序程序,并执行以下操作:
读取本地存储的待处理数据序列;
设置待处理数据序列的元素指示器的当前值;
根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
在所述当前值的初始值为2时,通过低位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
在所述当前值的初始值为n-1时,通过高位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素,其中,n为所述待处理数据序列中的记录数;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
通过下式确定所述记录数:
其中,fsize为所述待处理数据序列的文件大小,size为所述待处理数据序列中每条记录的文件大小。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
从所述待处理数据序列中读取所述当前元素对应的前一元素;
根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;
根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
对所述目标数据序列进行折半查找。
进一步地,处理器1001可以调用存储器1005中存储的基于外存的插入排序程序,还执行以下操作:
计算所述目标数据序列的当前中位数位置;
根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素;
比较所述当前中位数元素与待查找关键字的大小;
在所述当前中位数元素与所述待查找关键字的大小不相等时,根据预设公式更新所述当前中位数位置,并返回所述根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素的步骤,直至所述当前中位数元素与待查找关键字的大小相等时,查找成功。
本实施例通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并对当前元素在待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间,同时在外存中将目标数据序列进行折半查找,节省了数据导入内存的时间,提高了数据库的查询速度。
基于上述硬件结构,提出本发明基于外存的插入排序方法实施例。
参照图2,图2为本发明基于外存的插入排序方法第一实施例的流程示意图。
在第一实施例中,所述基于外存的插入排序方法包括以下步骤:
S10:外存储设备读取本地存储的待处理数据序列。
应理解的是,所述外存储设备为除计算机内存及CPU缓存以外的储存器,如硬盘、软盘、U盘等,本实施例对此不加以限制。
需要说明的是,现有的插入排序都是基于内存而进行,这样需要消耗大量内存空间和数据导入时间。为了节省内存空间和数据导入内存时间,本实施例设计了完全在外存进行的插入排序。这要做的好处,一方面节省了内存空间,另一方面节省了数据导入内存的时间。
S20:设置待处理数据序列的元素指示器的当前值。
首先,如果将无序外存文件序列划为两个序列,其中是一个关键字的有序序列,而是一个关键字的无序序列,则称为外存低位优先排序法。相反,如果将无序外存文件序列划为两个序列,其中是一个关键字的有序序列,而是一个关键字的无序序列,则称为外存高位优先排序法。
在具体实现中,当前值表示对所述待处理数据序列进行插入排序的当前元素的当前位置,通常通过先初始化待处理数据序列的元素指示器来确定从待处理数据序列的哪一个元素开始进入插入排序。而在插入排序过程中,还需要不断改变元素指示器的当前值,以读取待处理数据序列中的元素并进行插入,通过元素指示器可以实现序列中各元素的快速有序地插入。
S30:根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
需要说明的是,在外存中进行升序插入排序根据排序方向的不同,又可分为外存低位优先插入升序排序和外存高位优先插入升序排序,同理,在外存中进行插入降序排序根据排序方向的不同,又可分为外存低位优先插入降序排序和外存高位优先插入降序排序。
具体地,在所述当前值的初始值为2时,通过低位优先法进行插入排序,在在所述当前值的初始值为n-1时,通过高位优先法进行插入排序,其中n为待处理数据序列中的记录数,可以通过下式确定:
其中,fsize为所述待处理数据序列的文件大小,size为所述待处理数据序列中每条记录的文件大小。
需要说明的是,将所述当前元素在所述待处理数据序列中进行升序或降序插入排序,获得待定数据序列的具体步骤为:从所述待处理数据序列中读取所述当前元素对应的前一元素;根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
S40:将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
易于理解的是,在待处理数据序列中所有元素读完并插入排序后,在外存中最终会获得一个按关键字升序排序的目标数据序列或一个按关键字降序排序的目标数据序列,而利用这个有序的目标数据序列,无论是在外存中进行查找、插入及删除等操作,都非常快速方便且节省了内存空间。
本实施例通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并将当前元素在待处理数据序列中进行升序或降序插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间及数据导入内存的时间。
进一步地,如图3所示,基于第一实施例提出本发明基于外存的插入排序方法第二实施例,在本实施例中,步骤S30具体包括:
S31:在所述当前值的初始值为2时,通过低位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素。
应当理解的是,当元素指示器的初始值i=2时,会从待处理数据序列中的第2个元素开始进行插入排序直至i=n,即读完最后一个元素。
S32:对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
应当理解的是,通过低位优先法根据当前值从待处理数据序列中读取对应的当前元素,将当前元素在待处理数据序列中进行升序插入排序,可以称为外存低位优先插入升序排序。相应地,通过低位优先法根据当前值从待处理数据序列中读取对应的当前元素,将当前元素在待处理数据序列中进行降序插入排序,可以称为外存低位优先插入降序排序。
①外存低位优先插入升序排序的原理为:
排序过程如下:
步骤1:初始化序列的元素指示器i=2,表示从序列的第二个元素开始进行升序插入排序;
步骤7:如果i<n,则i=i+1并重复步骤2至步骤6;
算法实现过程如下:
(1)以读写方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令元素指示器i=2,表示需要最先插入排序的元素;
(5)将文件指针移到距离文件首偏移量为(i-1)size的地方;
(6)从当前文件指针位置读取一条记录x;
(7)令元素指示器j=i-1;
(8)将文件指针移到距离文件首偏移量为(j-1)size的地方;
(9)从当前文件指针位置读取一条记录y;
(10)如果x.key≥y.key,则转到步骤(15);
(11)将文件指针移到距离文件首偏移量j·size的地方;
(12)将记录y写入文件指针所指位置;
(13)令元素指示器j=j-1;
(14)如果j≥1,则返回步骤(8);
(15)将文件指针移到距离文件首偏移量j·size的地方;
(16)将记录x写入文件指针所指位置;
(17)令元素指示器i=i+1;
(18)如果i≤n,则返回步骤(5);
(19)外存文件的升序排序结束。
②外存低位优先插入降序排序的原理为:
排序过程如下:
步骤1:初始化序列的元素指示器i=2,表示从序列的第二个元素开始进行降序插入排序;
步骤7:如果i<n,则i=i+1并重复步骤2至步骤6;
算法实现过程如下:
(1)以读写方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令元素指示器i=2,表示需要最先插入排序的元素;
(5)将文件指针移到距离文件首偏移量为(i-1)size的地方;
(6)从当前文件指针位置读取一条记录x;
(7)令元素指示器j=i-1;
(8)将文件指针移到距离文件首偏移量为(j-1)size的地方;
(9)从当前文件指针位置读取一条记录y;
(10)如果x.key≤y.key,则转到步骤(15);
(11)将文件指针移到距离文件首偏移量j·size的地方;
(12)将记录y写入文件指针所指位置;
(13)令元素指示器j=j-1;
(14)如果j≥1,则返回步骤(8);
(15)将文件指针移到距离文件首偏移量j·size的地方;
(16)将记录x写入文件指针所指位置;
(17)令元素指示器i=i+1;
(18)如果i≤n,则返回步骤(5);
(19)外存文件的降序排序结束。
本实施例通过外存低位优先插入升序排序及外存低位优先插入降序排序,实现了在外存中将无序数据序列转换成关键字有序的数据序列,方便用户进行查找。
进一步地,如图4所示,基于第一实施例提出本发明基于外存的插入排序方法第三实施例,在本实施例中,步骤S30还包括:
S31’:在所述当前值的初始值为n-1时,通过高位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素,其中,n为所述待处理数据序列中的记录数。
应当理解的是,当元素指示器的初始值i=n-1时,会从待处理数据序列中的最后一个元素开始进行插入排序直至i=1,即读完待处理数据序列中的第一个元素。
S32’:对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
应当理解的是,通过高位优先法根据当前值从待处理数据序列中读取对应的当前元素,将当前元素在待处理数据序列中进行升序插入排序,可以称为外存高位优先插入升序排序。相应地,通过高位优先法根据当前值从待处理数据序列中读取对应的当前元素,将当前元素在待处理数据序列中进行降序插入排序,可以称为外存高位优先插入降序排序。
③外存高位优先插入升序排序的原理为:
排序过程如下:
步骤1:初始化序列的元素指示器i=n-1,表示从序列的最后一个元素开始进行升序插入排序;
步骤7:如果i>1,则i=i-1并重复步骤2至步骤6;
算法实现过程如下:
(1)以读写方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令元素指示器i=n-1,表示需要最先插入排序的元素;
(5)将文件指针移到距离文件首偏移量为(i-1)size的地方;
(6)从当前文件指针位置读取一条记录x;
(7)令元素指示器j=i+1;
(8)将文件指针移到距离文件首偏移量为(j-1)size的地方;
(9)从当前文件指针位置读取一条记录y;
(10)如果x.key≤y.key,则转到步骤(15);
(11)将文件指针移到距离文件首偏移量(j-2)size的地方;
(12)将记录y写入文件指针所指位置;
(13)令元素指示器j=j+1;
(14)如果j≤n,则返回步骤(8);
(15)将文件指针移到距离文件首偏移量(j-2)size的地方;
(16)将记录x写入文件指针所指位置;
(17)令元素指示器i=i-1;
(18)如果i≥1,则返回步骤(5);
(19)外存文件的升序排序结束。
④外存高位优先插入降序排序的原理为:
排序过程如下:
步骤1:初始化序列的元素指示器i=n-1,表示从序列最后一个元素开始进行降序插入排序;
步骤7:如果i>1,则i=i-1并重复步骤2至步骤6;
算法实现过程如下:
(1)以读写方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令元素指示器i=n-1,表示需要最先插入排序的元素;
(5)将文件指针移到距离文件首偏移量为(i-1)size的地方;
(6)从当前文件指针位置读取一条记录x;
(7)令元素指示器j=i+1;
(8)将文件指针移到距离文件首偏移量为(j-1)size的地方;
(9)从当前文件指针位置读取一条记录y;
(10)如果x.key≥y.key,则转到步骤(15);
(11)将文件指针移到距离文件首偏移量(j-2)size的地方;
(12)将记录y写入文件指针所指位置;
(13)令元素指示器j=j+1;
(14)如果j≤n,则返回步骤(8);
(15)将文件指针移到距离文件首偏移量(j-2)size的地方;
(16)将记录x写入文件指针所指位置;
(17)令元素指示器i=i-1;
(18)如果i≥1,则返回步骤(5);
(19)外存文件的升序排序结束。
本实施例通过外存高位优先插入升序排序及外存高位优先插入降序排序,实现了在外存中将无序数据序列转换成关键字有序的数据序列,方便用户进行查找。
进一步地,如图5所示,基于第一实施例提出本发明基于外存的插入排序方法第四实施例,在本实施例中,所述步骤S40之后,所述方法还包括:
S50:对所述目标数据序列进行折半查找。
应当理解的是,在一个顺序表中,最快的查找速度就是折半查找,当前对顺序表的折半查找都是在内存进行的,同样也需要消耗大量内存空间和数据导入时间,降低查找速度。本实施例中由于目标数据序列是在外存中对无序数据序列进行排序后形成的,所以可以在外存中对目标数据序列进行折半查找。不管外存文件序列是关键字的升序序列还是降序序列,都可以用折半查找进行查找。对外存文件直接进行的折半查找,不妨将其称为外存折半查找。如果要查找的外存文件是关键字的升序序列,则称为外存升序序列的折半查找。如果要查找的外存文件是关键字的降序序列,则称为外存降序序列的折半查找。
需要说明的是,对所述目标数据序列进行折半查找的步骤为:计算所述目标数据序列的当前中位数位置;根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素;比较所述当前中位数元素与待查找关键字的大小;在所述当前中位数元素与所述待查找关键字的大小不相等时,根据预设公式更新所述当前中位数位置,并返回所述根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素的步骤,直至所述当前中位数元素与待查找关键字的大小相等时,查找成功。
⑤外存升序序列的折半查找的原理为:
设X=x1x2…xn是一个关键字升序的外存数据文件,即x1.key<x2.key<…<xn.key。如果想在该升序数据库文件中用折半查找法查找关键字为key的记录,则过程如下:
步骤1:令l=1和h=n,使l指示数据库的表首元素,使h指示数据库的表尾元素;
步骤3:从数据库文件中读取第m个元素xm;
步骤4:如果key<xm.key,则使h=m-1;
步骤5:如果key>xm.key,则使l=m+1;
步骤6:重复步骤2至步骤5,直到key=xm.key或l>h;
步骤7:如果l>h,则查询失败;否则,元素xm就是关键字为key的记录。
算法实现过程如下:
设X=x1x2…xn是一个关键字升序的外存数据文件,则在外存用折半查找法查找关键字为key的过程如下:
(1)以只读方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令l=1和h=n;
(6)将文件指针移到距离文件首偏移量(m-1)size的地方;
(7)从当前文件指针位置读取一条记录x;
(8)如果key>x.key,则使l=m+1;
(9)如果key<x.key,则使h=m-1;
(10)重复步骤(5)至步骤(9),直至key=x.key或l>h;
(11)如果l>h,则查找失败;否则,x就是关键字为key的记录。
⑥外存降序序列的折半查找的原理为:
设X=x1x2…xn是一个关键字降序的外存数据文件,即x1.key>x2.key>…>xn.key。如果想在该降序数据库文件中用折半查找法查找关键字为key的记录,则过程如下:
步骤1:令l=1和h=n,使l指示数据库的表首元素,使h指示数据库的表尾元素;
步骤3:从数据库文件中读取第m个元素xm;
步骤4:如果key<xm.key,则使l=m+1;
步骤5:如果key>xm.key,则使h=m-1;
步骤6:重复步骤2至步骤5,直到key=xm.key或l>h;
步骤7:如果l>h,则查询失败;否则,元素xm就是关键字为key的记录。
算法实现过程如下:
设X=x1x2…xn是一个关键字降序的外存数据文件,则在外存用折半查找法查找关键字为key的过程如下:
(1)以只读方式打开数据文件;
(2)检测出文件大小为fsize;
(4)令l=1和h=n;
(6)将文件指针移到距离文件首偏移量(m-1)size的地方;
(7)从当前文件指针位置读取一条记录x;
(8)如果key<x.key,则使l=m+1;
(9)如果key>x.key,则使h=m-1;
(10)重复步骤(5)至步骤(9),直至key=x.key或l>h;
(11)如果l>h,则查找失败;否则,x就是关键字为key的记录
本实施例通过设计完全在外存进行的折半查找,并基于完全在外在的插入排序进行折半查找,极大地提升了数据库的查询速度,同时又节省了宝贵的内存空间,能很快地查询出用户需要的外存数据。
本发明进一步提供一种基于外存的插入排序系统。
参照图6,图6为本发明基于外存的插入排序系统一实施例的功能模块图。
本实施例中,所述基于外存的插入排序系统包括:
数据读取模块10,用于读取本地存储的待处理数据序列。
需要说明的是,现有的插入排序都是基于内存而进行,这样需要消耗大量内存空间和数据导入时间。为了节省内存空间和数据导入内存时间,本实施例设计了完全在外存进行的插入排序和折半查找。这要做的好处,一方面节省了内存空间,另一方面节省了数据导入内存的时间。
参数设置模块20,用于设置待处理数据序列的元素指示器的当前值。
首先,如果将无序外存文件序列划为两个序列,其中是一个关键字的有序序列,而是一个关键字的无序序列,则称为外存低位优先排序法。相反,如果将无序外存文件序列划为两个序列,其中是一个关键字的有序序列,而是一个关键字的无序序列,则称为外存高位优先排序法。
在具体实现中,当前值表示对所述待处理数据序列进行插入排序的当前元素的当前位置,通常通过先初始化待处理数据序列的元素指示器来确定从待处理数据序列的哪一个元素开始进入插入排序。而在插入排序过程中,还需要不断改变元素指示器的当前值,以读取待处理数据序列中的元素并进行插入,通过元素指示器可以实现序列中各元素的快速有序地插入。
插入排序模块30,用于根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
需要说明的是,在外存中进行升序插入排序根据排序方向的不同,又可分为外存低位优先插入升序排序和外存高位优先插入升序排序,同理,在外存中进行插入降序排序根据排序方向的不同,又可分为外存低位优先插入降序排序和外存高位优先插入降序排序。
具体地,在所述当前值的初始值为2时,通过低位优先法进行插入排序,在在所述当前值的初始值为n-1时,通过高位优先法进行插入排序,其中n为待处理数据序列中的记录数,可以通过下式确定:
其中,fsize为所述待处理数据序列的文件大小,size为所述待处理数据序列中每条记录的文件大小。
具体地,将所述当前元素在所述待处理数据序列中进行升序或降序插入排序,获得待定数据序列的具体步骤为:从所述待处理数据序列中读取所述当前元素对应的前一元素;根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
目标获取模块40,用于将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
易于理解的是,在待处理数据序列中所有元素读完并插入排序后,在外存中最终会获得一个按关键字升序排序的目标数据序列或一个按关键字降序排序的目标数据序列,而利用这个有序的目标数据序列,无论是在外存中进行查找、插入及删除等操作,都非常快速方便且节省了内存空间。
本实施例通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并对当前元素在待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间及数据导入内存的时间。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有基于外存的插入排序程序,所述基于外存的插入排序程序被处理器执行时实现如下操作:
读取本地存储的待处理数据序列;
设置待处理数据序列的元素指示器的当前值;
根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
在所述当前值的初始值为2时,通过低位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
在所述当前值的初始值为n-1时,通过高位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素,其中,n为所述待处理数据序列中的记录数;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
通过下式确定所述记录数:
其中,fsize为所述待处理数据序列的文件大小,size为所述待处理数据序列中每条记录的文件大小。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
从所述待处理数据序列中读取所述当前元素对应的前一元素;
根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;
根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
对所述目标数据序列进行折半查找。
进一步地,所述基于外存的插入排序程序被处理器执行时还实现如下操作:
计算所述目标数据序列的当前中位数位置;
根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素;
比较所述当前中位数元素与待查找关键字的大小;
在所述当前中位数元素与所述待查找关键字的大小不相等时,根据预设公式更新所述当前中位数位置,并返回所述根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素的步骤,直至所述当前中位数元素与待查找关键字的大小相等时,查找成功。
本实施例通过外存储设备读取本地存储的待处理数据序列;设置待处理数据序列的元素指示器的当前值;根据当前值从待处理数据序列中读取对应的当前元素,并对当前元素在待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;将待定数据序列作为待处理数据序列,并返回设置待处理数据序列的元素指示器的当前值的步骤,直至待处理数据序列中无可读取的当前元素时,获得目标数据序列,实现了完全在外存中进行插入排序,节省了内存空间,同时在外存中将目标数据序列进行折半查找,节省了数据导入内存的时间,提高了数据库的查询速度。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种基于外存的插入排序方法,其特征在于,所述基于外存的插入排序方法包括以下步骤:
外存储设备读取本地存储的待处理数据序列;
设置待处理数据序列的元素指示器的当前值;
根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列;
对所述目标数据序列进行折半查找。
2.如权利要求1所述的基于外存的插入排序方法,其特征在于,所述根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
在所述当前值的初始值为2时,通过低位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
3.如权利要求1所述的基于外存的插入排序方法,其特征在于,所述根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
在所述当前值的初始值为n-1时,通过高位优先法根据所述当前值从所述待处理数据序列中读取对应的当前元素,其中,n为所述待处理数据序列中的记录数;
对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列。
5.如权利要求2至4中任一项所述的基于外存的插入排序方法,其特征在于,所述对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列,具体包括:
从所述待处理数据序列中读取所述当前元素对应的前一元素;
根据所述当前元素及所述前一元素的大小对所述当前元素在所述待处理数据序列中按照升序或降序进行排序,并确定所述当前元素的插入位置;
根据所述插入位置将所述当前元素插入至所述待处理数据序列中,获得待定数据序列。
6.如权利要求1所述的基于外存的插入排序方法,其特征在于,所述将所述对所述目标数据序列进行折半查找,具体包括:
计算所述目标数据序列的当前中位数位置;
根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素;
比较所述当前中位数元素与待查找关键字的大小;
在所述当前中位数元素与所述待查找关键字的大小不相等时,根据预设公式更新所述当前中位数位置,并返回所述根据所述当前中位数位置从所述目标数据序列中读取当前中位数元素的步骤,直至所述当前中位数元素与待查找关键字的大小相等时,查找成功。
7.一种基于外存的插入排序系统,其特征在于,所述基于外存的插入排序系统包括:
数据读取模块,用于读取本地存储的待处理数据序列;
参数设置模块,用于设置待处理数据序列的元素指示器的当前值;
插入排序模块,用于根据所述当前值从所述待处理数据序列中读取对应的当前元素,并对所述当前元素在所述待处理数据序列中按照升序或降序进行插入排序,获得待定数据序列;
目标获取模块,用于将所述待定数据序列作为所述待处理数据序列,并返回所述设置待处理数据序列的元素指示器的当前值的步骤,直至所述待处理数据序列中无可读取的当前元素时,获得目标数据序列;
所述目标获取模块,还用于对所述目标数据序列进行折半查找。
8.一种外存储设备,其特征在于,所述基于外存的插入排序设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的基于外存的插入排序程序,所述基于外存的插入排序程序配置为实现如权利要求1至6中任一项所述的基于外存的插入排序方法的步骤。
9.一种存储介质,其特征在于,所述存储介质上存储有基于外存的插入排序程序,所述基于外存的插入排序程序被处理器执行时实现如权利要求1至6中任一项所述的基于外存的插入排序方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910135667.5A CN109857366B (zh) | 2019-02-20 | 2019-02-20 | 基于外存的插入排序方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910135667.5A CN109857366B (zh) | 2019-02-20 | 2019-02-20 | 基于外存的插入排序方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857366A CN109857366A (zh) | 2019-06-07 |
CN109857366B true CN109857366B (zh) | 2021-06-22 |
Family
ID=66898759
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910135667.5A Expired - Fee Related CN109857366B (zh) | 2019-02-20 | 2019-02-20 | 基于外存的插入排序方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857366B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110852046B (zh) * | 2019-10-18 | 2021-11-05 | 中山大学 | 一种文本后缀索引的分块归纳排序方法及系统 |
CN111125313B (zh) * | 2019-12-24 | 2023-12-01 | 武汉轻工大学 | 文本相同内容查询方法、装置、设备及存储介质 |
CN112631787A (zh) * | 2021-01-06 | 2021-04-09 | 薛昌熵 | 一种海量外排序方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102497437B (zh) * | 2011-12-16 | 2015-02-18 | 北京邮电大学 | 一种实现负载均衡的方法、设备及系统 |
CN104077423B (zh) * | 2014-07-23 | 2017-05-03 | 山东大学(威海) | 一种基于一致性散列的结构化数据存储、查询和迁移方法 |
CN104850618B (zh) * | 2015-05-18 | 2018-06-01 | 北京京东尚科信息技术有限公司 | 一种提供有序数据的系统和方法 |
CN105159987B (zh) * | 2015-08-31 | 2019-03-29 | 深圳市茁壮网络股份有限公司 | 一种数据存储、查找方法及装置 |
CN105635285B (zh) * | 2015-12-30 | 2018-12-14 | 南京理工大学 | 一种基于状态感知的vm迁移调度方法 |
CN106227894B (zh) * | 2016-08-24 | 2019-11-26 | 中国农业银行股份有限公司 | 一种数据分页查询方法和装置 |
CN106777282B (zh) * | 2016-12-29 | 2018-07-13 | 百度在线网络技术(北京)有限公司 | 相关搜索的排序方法和装置 |
CN107040589B (zh) * | 2017-03-15 | 2019-10-25 | 西安电子科技大学 | 通过虚拟化密码设备集群提供密码服务的系统及方法 |
CN108563743A (zh) * | 2018-04-12 | 2018-09-21 | 郑州云海信息技术有限公司 | 一种文件读写方法、系统及设备和存储介质 |
-
2019
- 2019-02-20 CN CN201910135667.5A patent/CN109857366B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN109857366A (zh) | 2019-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857366B (zh) | 基于外存的插入排序方法、系统、设备及存储介质 | |
CN110597855B (zh) | 一种数据查询方法、终端设备及计算机可读存储介质 | |
MX2007005771A (es) | Busqueda y provision de objetos usando comparacion byte por byte. | |
CN102880726B (zh) | 一种图像过滤方法及系统 | |
CN110442642B (zh) | 分布式数据库的数据处理方法、装置和存储介质 | |
US20140122509A1 (en) | System, method, and computer program product for performing a string search | |
CN112131218B (zh) | 一种基因对比的哈希查表方法、装置、设备及存储介质 | |
CN109815238B (zh) | 用严格平衡二叉树实现数据库的动态添加方法及装置 | |
CN111143597A (zh) | 图像检索方法、终端及存储装置 | |
CN108228799B (zh) | 对象索引信息的存储方法及装置 | |
CN111752955A (zh) | 数据处理方法、装置、设备及计算机可读存储介质 | |
CN109901796A (zh) | 基于外存的排序选择方法、装置、外存储设备及存储介质 | |
EP3343395B1 (en) | Data storage method and apparatus for mobile terminal | |
CN106775586B (zh) | 数据排序方法和装置 | |
CN111858581A (zh) | 一种分页查询的方法、装置、存储介质和电子设备 | |
CN106844406B (zh) | 检索方法和检索装置 | |
WO2011073680A1 (en) | Improvements relating to hash tables | |
WO2020258652A1 (zh) | 字符替换方法、系统、计算机设备及计算机可读存储介质 | |
CN115202755A (zh) | 一种插件加载方法、装置、计算机设备及存储介质 | |
CN113779029A (zh) | 一种数据查询的方法及装置 | |
CN112380445A (zh) | 数据查询方法、装置、设备和存储介质 | |
US8407259B2 (en) | System and method for storing and retrieving data from storage | |
CN112765938B (zh) | 构造后缀数组的方法、终端设备及计算机可读存储介质 | |
US9323753B2 (en) | Method and device for representing digital documents for search applications | |
CN109325031B (zh) | 一种数据统计方法、装置、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210622 |