数据排序方法和装置技术领域
本发明涉及计算机技术领域,特别是涉及一种数据排序方法和装置。
背景技术
目前存在多种排序算法,例如“冒泡排序”、“简单选择排序”、“直接插入排序”、“堆
排序”、“希尔排序”等等,但该些排序均是在单片机芯片上面进行排序的,单片机芯片上面
的ram(random access memory,随机存取存储器)可以随意改变。但是像是flash(Flash存
储器,英文名称是“Flash Memory”,一般简称为“Flash”,它属于内存器件的一种)这样的写
操作只能够从“1”写成“0”的存储设备,如果需要将数据从“0”写成“1”,则需要连续擦除一
片存储空间,其不能够单独修改某一byte(字节)。
发明内容
基于此,有必要提供一种数据排序方法和装置,其可以根据需要,在不连续擦除一
片存储空间的前提下,对写操作只能够从“1”写成“0”的存储设备中存储的数据进行排序。
一种数据排序方法,待排序数据存储于第一存储器中的源数据区,所述方法包括:
在随机存取存储器中设置对应于所述源数据区的待排序数据的标志位,以标志所
述源数据区的每条待排序数据是否已排序;或者在所述第一存储器中设置对应于所述源数
据区的待排序数据的标志位,且当设置在所述第一存储器中的标志位为1时,标志所述源数
据区的相应的待排序数据已排序;
在排序过程中判断源数据区的每条待排序数据所对应的标志位是否标志该待排
序数据已排序;
当与该标志位相对应的待排序数据未排序时,对该待排序数据进行排序后,改变
相应标志位,并将已排序的数据按照排序顺序存储在所述第一存储器的排序数据区。
在其中一个实施例中,所述源数据区的每条待排序数据为一数据块,所述数据块
中包含数个字节的数据;
所述在随机存取存储器中设置对应于所述源数据区的待排序数据的标志位的步
骤,具体包括:
在随机存取存储器中设置对应于所述源数据区的每条数据块的标志位;
所述在所述第一存储器中设置对应于所述源数据区的待排序数据的标志位的步
骤,具体包括:
在所述第一存储器中设置对应于所述源数据区的每条数据块的标志位。
在其中一个实施例中,当所述标志位设置在所述随机存取存储器中时,所述判断
源数据区的每条待排序数据所对应的标志位是否标志该待排序数据已排序的步骤,具体
为:判断每条排序数据所对应的标志位是否为1;
当所述标志位设置在所述第一存储器中,且设置在所述第一存储器中的标志位为
1时标志所述源数据区的相应的待排序数据已排序时,所述判断源数据区的每条待排序数
据所对应的标志位是否标志该待排序数据已排序的步骤,具体为:
判断每条待排序数据所对应的标志位是否为0。
在其中一个实施例中,所述方法包括:
在所有待排序数据均排序完成后,擦除源数据区存储的待排序数据。
在其中一个实施例中,所述第一存储器为写操作只能将数据从“1”写成“0”的存储
设备。
一种排序装置,待排序数据存储于第一存储器中的源数据区,所述装置包括:
标志位设置模块,用于在随机存取存储器中设置对应于所述源数据区的待排序数
据的标志位,以标志所述源数据区的每条待排序数据是否已排序;或者在所述第一存储器
中设置对应于所述源数据区的待排序数据的标志位,且当设置在所述第一存储器中的标志
位为1时,标志所述源数据区的相应的待排序数据已排序;
标志位判断模块,该标志位判断模块的输入端与标志位设置模块的输出端相连
接,该标志位判断模块用于在排序过程中判断源数据区的每条待排序数据所对应的标志位
是否标志该待排序数据已排序;
排序模块,该排序模块的输入端与所述标志位判断模块的输出端相连接,该排序
模块用于当与该标志位相对应的待排序数据未排序时,对该待排序数据进行排序后,改变
相应标志位,并将已排序的数据按照排序顺序存储在所述第一存储器的排序数据区。
在其中一个实施例中,所述装置还包括:
数据块判断模块,所述数据块判断模块的输出端与所述标志位设置模块的输入端
相连接,所述数据块判断模块用于将所述源数据区存储的待排序数据以数据块为单元进行
划分,所述数据块中包含数个字节的数据。
在其中一个实施例中,所述标志位设置模块还用于设置对应于所述源数据区的每
条数据块的标志位。
在其中一个实施例中,所述装置还包括:
数据擦除模块,所述数据擦除模块的输入端与所述排序模块的输出端相连接,所
述数据擦除模块用于在所有待排序数据均排序完成后,擦除源数据区存储的待排序数据。
在其中一个实施例中,所述第一存储器是写操作只能将数据从“1”写成“0”的存储
设备。
上述的数据排序方法和装置,通过设置对应于所述源数据区的待排序数据的标志
位以标志所述源数据区的每条待排序数据是否已排序,且将已排序的数据按照排序顺序存
储在第一存储器的排序数据区,从而不需要连续擦除一片存储空间,不会因排序造成卡顿
的现象。
附图说明
图1为一实施例中数据排序方法的流程图;
图2为另一实施例中数据排序方法的流程图;
图3为图1所示数据排序方法的一应用图;
图4为图1所示数据排序方法的另一应用图;
图5为一实施例中排序装置的结构示意图。
其中,
100 标志位设置模块
200 标志位判断模块
300 排序模块
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对
本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并
不用于限定本发明。
在详细说明根据本发明的实施例前,应该注意到的是,所述的实施例主要在于与
数据排序方法和装置相关的步骤和系统组件的组合。因此,所属系统组件和方法步骤已经
在附图中通过常规符号在适当的位置表示出来了,并且只示出了与理解本发明的实施例有
关的细节,以免因对于得益于本发明的本领域普通技术人员而言显而易见的那些细节模糊
了本发明的公开内容。
在本文中,诸如左和右,上和下,前和后,第一和第二之类的关系术语仅仅用来区
分一个实体或动作与另一个实体或动作,而不一定要求或暗示这种实体或动作之间的任何
实际的这种关系或顺序。术语“包括”、“包含”或任何其他变体旨在涵盖非排他性的包含,由
此使得包括一系列要素的过程、方法、物品或者设备不仅包含这些要素,而且还包含没有明
确列出的其他要素,或者为这种过程、方法、物品或者设备所固有的要素。
术语“第一存储器”是指写操作只能把数据从“1”写成“0”的存储设备,例如flash
(Flash存储器,英文名称是“Flash Memory”,一般简称为“Flash”)等。
请参阅图1至图3所示,图1为一实施例中数据排序方法的流程图,图2为另一实施
例中数据排序方法的流程图。图3为图1所示数据排序方法的一应用图。在该实施例中,待排
序数据存储于存储器中的源数据区,该方法可以包括:
S102:在随机存取存储器中设置对应于源数据区的待排序数据的标志位,以标志
源数据区的每条待排序数据是否已排序。
请参阅图3所示,图3中第一排为源数据区,其中存储待排序数据,第二排为对应于
源数据区的待排序数据的标志位,在该实施例中,标志位存储在随机存取存储器中,如果随
机存取存储器中的数据默认全是0,表示所有数据均还未排序,当待排序数据排序后,对应
的随机存取存储器中的标志位就会置1。第三排为排序数据区。
在其中一个实施例中,当标志位存储在随机存取存储器中时,还可以通过1表示数
据未排序,0表示数据已排序,即当随机存取存储器中的数据默认全是1时,表示所有数据均
还未排序,当待排序数据排序后,对应随机存取存储器中的标志位就会置0。
在另外的一个实施例中,该步骤S102也可以为如图2所示的步骤S202,在第一存储
器中设置对应于源数据区的待排序数据的标志位,且当设置在第一存储器中的标志位为1
时,标志所述源数据区的相应的待排序数据已排序,即当源数据区中的数据全是1时,表示
所有数据均未排序,当待排序数据排序后,对应的标志位则置0。
在上述实施例中,每条待排序数据均对应于一个标志位。
S104:在排序过程中判断源数据区的每条待排序数据所对应的标志位是否标志该
待排序数据已排序。可以参阅图3所示,图3中对应于待排序数据A4的标志位为1,则表示该
待排序数据已经排序过了,对应于待排序数据A1的标志位为0,则表示该待排序数据还未排
序过。在其他的实施例中,还可以当标志位为0时表示待排序数据已经排序过,而标志位为1
时代表待排序数据未排序过;或者还可以采用其他的标志方式。
S106:当与该标志位相对应的待排序数据未排序时,对该待排序数据进行排序后,
改变相应标志位,并将已排序的数据按照排序顺序存储在第一存储器的排序数据区。
上述的数据排序方法,通过设置对应于所述源数据区的待排序数据的标志位以标
志所述源数据区的每条待排序数据是否已排序,且将已排序的数据按照排序顺序存储在第
一存储器的排序数据区,从而不需要连续擦除一片存储空间,不会因排序造成卡顿的现象。
在其中一个实施例中,源数据区的每条待排序数据为一数据块,数据块中包含数
个字节的数据。在随机存取存储器中设置对应于所述源数据区的待排序数据的标志位的步
骤,具体可以包括:在随机存取存储器中设置对应于源数据区的每条数据块的标志位。在第
一存储器中设置对应于源数据区的待排序数据的标志位的步骤,具体可以包括:在第一存
储器中设置对应于源数据区的每条数据块的标志位。
其中,一个数据块可以包括多个数据,例如其可以包含姓名、性别、成绩等,一个数
据块可以看成为一个结构体,其可以包含数个字节的数据;在其他的实施例中,例如网站中
浏览结果的排序,每条待排序数据为一个数据块,其可以包括文章的名称、浏览量、摘要等;
或者可以包括物品名称、浏览量、成交量等,即在该实施例中一条待排序数据并不是仅指一
个字节的数据,其可能是一篇文章、一个待售物品等,可以包含多个字节。
在上述的实施例中,例如图4所示,图4为图1所示数据排序方法的另一应用图,例
如一条待排序数据为一个数据块,该数据块为一个结构体,该结构体中包含姓名信息、性别
信息、成绩信息、班级信息,且假设上述信息均为整型数据,即每个数据占据2个字节,则每
条待排序数据包含8个字节,与该条待排序数据对应的标志位为1位,即1bit,换句话说即用
随机存取存储器中1bit即可以对应第一存储器中8字节的待排序数据,因此随机存取存储
器中的标志位仅需要一小块存储区域即可。在其他实施例中,每条待排序数据可能占据的
字节数不同,例如有的待排序数据可能占据16字节,其标志位仍为1位,有的待排序数据可
能占据64字节,其标志位仍为1位,有的待排序数据可能占据4字节,其标志位也为1位,在此
不再赘述。
在其中一个实施例中,上述方法还可以包括:在所有待排序数据均排序完成后,擦
除源数据区存储的待排序数据。由于第一存储器中既包括源数据区又包括排序数据区,即
一个数据存储了两遍,造成了存储空间的浪费,因此在所有待排序数据排序完成后,可以擦
除源数据区存储的待排序数据,这样可以节省存储空间,且此时不用担心连续的擦除会造
成信息的误删除等。在其他的实施例中,由于随着科技的发展,存储设备的价格也越来越
低,如果当前存储空间较大,可以不擦除源数据区的数据,这样可以保留原始数据,以便后
续需要的时候查看,例如,在网页应用或APP中,以淘宝网为例,假设用户首先输入“杯子”这
个关键字,可能网页会默认以销售量这个关键字进行排序,此时第一排序区的数据示意销
售量进行排序的,而用户需要的是以“价格”这个关键字进行排序,则上述内容又会在第二
排序区以“价格”进行排序,此时可以不删除原第一排序区的内容,因为用户可能在看完以
“价格”为关键字的排序后,又想看以“销售量”为关键字的排序,如果此时再一次进行排序,
则很容易造成卡顿的现象,而如果将先前排序的内容保存下来的话,则直接调取即可,不需
要再次进行排序,节省了内存。
请参阅图5所示,图5为一实施例中排序装置的结构示意图,待排序数据存储于第
一存储器中的源数据区,该装置可以包括标志位设置模块100、标志位判断模块200以及排
序模块300,该标志位判断模块200的输入端与标志位设置模块100的输出端相连接,该排序
模块300的输入端与标志位判断模块200的输出端相连接。
该标志位设置模块100用于在随机存取存储器中设置对应于源数据区的待排序数
据的标志位,以标志源数据区的每条待排序数据是否已排序,或者在第一存储器中设置对
应于源数据区的待排序数据的标志位,且当设置在第一存储器中的标志位为1时,标志源数
据区的相应的待排序数据已排序。该标志位判断模块200用于在排序过程中判断源数据区
的每条待排序数据所对应的标志位是否标志该待排序数据已排序。该排序模块300用于当
与该标志位相对应的待排序数据未排序时,对该待排序数据进行排序后,改变相应标志位,
并将已排序的数据按照排序顺序存储在第一存储器的排序数据区。
在其中一个实施例中,装置还可以包括数据块判断模块,该数据块判断模块的输
出端与标志位设置模块100的输入端相连接,数据块判断模块用于将源数据区存储的待排
序数据以数据块为单元进行划分,数据块中包含数个字节的数据。
在其中一个实施例中,标志位设置模块100还可以用于设置对应于源数据区的每
条数据块的标志位。
在其中一个实施例中,装置还可以包括数据擦除模块。数据擦除模块的输入端与
排序模块300的输出端相连接,数据擦除模块用于在所有待排序数据均排序完成后,擦除源
数据区存储的待排序数据。
对该装置的具体限定可以参阅上文对方法的限定,在此不再赘述。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实
施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存
在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并
不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来
说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护
范围。因此,本发明专利的保护范围应以所附权利要求为准。