数据排序方法和装置与流程

文档序号:12462857阅读:216来源:国知局
数据排序方法和装置与流程

本发明涉及计算机技术领域,特别是涉及一种数据排序方法和装置。



背景技术:

目前存在多种排序算法,例如“冒泡排序”、“简单选择排序”、“直接插入排序”、“堆排序”、“希尔排序”等等,该些排序是在单片机芯片上面进行排序的,通常在排序的时候会擦除原始信息,例如原始信息的存储顺序是A1、A2、A3、A4、A5时,而排序后的信息是A2、A3、A1、A5、A4,由于排序是在单片机芯片的随机存取存储器中进行的,因此会直接改变原始信息的存储位置,从而得到排序后的信息,从而导致原始信息的存储位置的丢失。



技术实现要素:

基于此,有必要提供一种数据排序方法和装置,其可以在对数据排序后,仍可以保持原始数据信息。

一种数据排序方法,所述方法包括:

在每条待排序数据前添加指针;

通过修改所述指针对所述待排序数据进行排序,在排序过程中保持所述待排序数据的存储位置不变,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址。

在其中一个实施例中,所述在每条待排序数据前添加指针的步骤,是在每条待排序数据前添加指针以形成组合数据。

在其中一个实施例中,所述通过修改所述指针对所述待排序数据进行排序的步骤中,是以关键字对所述待排序数据进行排序;当通过多组关键字分别进行排序时,所述在每条待排序数据前添加指针的步骤,是在每条待排序数据对应的组合数据前添加与当前排序依据的关键字对应的指针以形成组合数据。

在其中一个实施例中,所述待排序数据为一数据块,所述数据块中包含数个字节的数据。

在其中一个实施例中,所述数据存储于flash存储器或ram存储器中。

在其中一个实施例中,所述数据存储于flash存储器中;所述在每条待排序数据前添加指针的步骤中添加的指针的每一位均为1。

一种数据排序装置,所述装置包括:

数据模块,用于存储所述待排序数据,且在排序过程中保持所述待排序数据的存储位置不变。

指针模块,该指针模块的输入端与所述数据模块的输出端相连接,该指针模块用于在每条待排序数据前添加指针;

排序模块,该排序模块的输入端与所述指针模块的输出端相连接,该排序模块用于通过修改所述指针对所述待排序数据进行排序,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址。

在其中一个实施例中,所述指针模块包括:

关键字识别单元,用于获取关键字的组数;

指针添加单元,该指针添加单元的输入端与所述关键字识别单元的输出端相连接,该指针添加单元用于根据所述关键字的组数,在每条待排序数据对应的组合数据前添加与当前排序依据的关键字对应的指针以形成组合数据。

在其中一个实施例中,所述待排序数据为一数据块,所述数据块中包含数个字节的数据。

在其中一个实施例中,所述数据存储于flash存储器或ram存储器中。

上述数据排序方法和装置,通过引入指针,保持原始数据的存储位置不变,仅仅通过改变指针来对数据进行排序,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址,实现了非顺序存储的排序,排序效率高,应用广泛。

附图说明

图1为一实施例中数据排序方法的流程图;

图2为图1所示实施例的一应用图;

图3为图2中所示的数据经过排序后的示意图;

图4为图1所示实施例的另一应用图;

图5为一实施例中数据排序装置的示意图。

其中,

100 数据模块

200 指针模块

300 排序模块

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。

在详细说明根据本发明的实施例前,应该注意到的是,所述的实施例主要在于与数据排序方法和装置相关的步骤和系统组件的组合。因此,所属系统组件和方法步骤已经在附图中通过常规符号在适当的位置表示出来了,并且只示出了与理解本发明的实施例有关的细节,以免因对于得益于本发明的本领域普通技术人员而言显而易见的那些细节模糊了本发明的公开内容。

在本文中,诸如左和右,上和下,前和后,第一和第二之类的关系术语仅仅用来区分一个实体或动作与另一个实体或动作,而不一定要求或暗示这种实体或动作之间的任何实际的这种关系或顺序。术语“包括”、“包含”或任何其他变体旨在涵盖非排他性的包含,由此使得包括一系列要素的过程、方法、物品或者设备不仅包含这些要素,而且还包含没有明确列出的其他要素,或者为这种过程、方法、物品或者设备所固有的要素。

请参阅图1所示,图1为一实施例中数据排序方法的流程图,在该实施例中,该方法可以包括:

S102:在每条待排序数据前添加指针。

请参阅图2所示,图2为图1所示实施例的一应用图。在该实施例中,数据A1前添加第一指针1,数据A2前添加第一指针2,数据A3前添加第一指针3,数据A4前添加第一指针4,数据A5前添加第一指针5,且虽然在数据前添加了指针,但是该数据A1、A2、A3、A4、A5的存储的先后顺序并未改变。

S104:通过修改指针对待排序数据进行排序,在排序过程中保持待排序数据的存储位置不变,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址。

请参阅图3所示,图3为图2中所示的数据经过排序后的示意图。在该实施例中,虽然经过排序,但是数据A1、A2、A3、A4、A5的存储的先后顺序并未改变,即其的存储位置是不变的,但是可以看到图2中数据A1、A2、A3、A4、A5的指针发生了变化,假设排序后的数据的顺序是A2、A5、A4、A3、A1,则可以发现数据A2前的第二指针指向了数据A5的地址,数据A5前的第五指针指向了数据A4的地址,数据A4前的第四指针指向了数据A3的地址,数据A3前的第三指针指向了数据A1的地址,即当知晓了A2的地址,则就可以按照顺序访问A5、A4、A3、A1,在实际应用中,数据可以依存储顺序进行读取,例如先读取第一指针1,如果第一指针1未改变,则继续读取第一指针2,此时可以发现第一指针2指向了数据A5,这样就可以按照顺序访问A5、A4、A3、A1,在其他实施例中,还可以在排序阶段时,在最小数据或最大数据或者以其他关键字进行排序后的第一个数据的指针上进行标记,以标识数据从该数据进行读取,这样当需要读取时,遍历到该指针时,则进行数据的读取。

因此在该实施例中,上述数据排序方法和装置,通过引入指针,保持原始数据的存储位置不变,仅仅通过改变指针来对数据进行排序,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址,实现了非顺序存储的排序,排序效率高,应用广泛。

在其中一个实施例中,请再次参阅图3所示,在每条待排序数据前添加指针的步骤具体可以为以在每条待排序数据前添加指针以形成组合数据,例如图3中所示的第一指针1和数据A1其组合形成为第一组合数据,第一指针2和数据A2其组合也形成为第一组合数据,第一指针3和数据A3其组合也形成为第一组合数据,第一指针4和数据A4其组合也形成为第一组合数据,第一指针5和数据A5其组合也形成为第一组合数据。

该种数据的形成可以应用在仅以一个关键字进行排序的场景中,例如在老师统计成绩的时候,其可能需要仅以成绩为关键字进行排序,这时在每个数据前仅添加一个指针即可。在该实施例中,在需要进行排序时通过改变指针所指向的地址来进行数据的排序,即仅改变指针,但保持原始数据的顺序。例如老师可能在统计数据时,其可能是按照学号进行输入的,则原始数据是以学号为顺序进行的,而在排序时,老师可能是以成绩进行排序的,则在排序时,保留原始按照学号存储的数据的存储顺序,仅通过改变指针来改变数据的排序,实现了非顺序存储的排序,这样当老师又需要以学号为顺序的成绩时,则计算机内部就不需要再一次对以成绩排序的数据再次进行排序,直接调用即可,防止系统因多次排序而造成的卡顿现象。

请参阅图4所示,图4为图1所示实施例的另一应用图,在该实施例中,当通过多组关键字分别进行排序时,在每条待排序数据前添加指针的步骤,是在每条待排序数据对应的组合数据前添加与当前排序依据的关键字对应的指针以形成组合数据。在该实施例中,存在多个关键字,即存在以多个关键字分别进行排序的排序后的数据,传统情况下如果需要存储这种数据,则需要将同样的数据进行多次存储,例如当存在3个关键字时,则相应的数据可能需要存储3遍,或者每一次调用以不同关键字进行排序的数据时,都需要再次计算进行排序,从而可能造成系统的卡顿。

请参阅图4所示,在该实施例中,其包含3个关键字,在其他的实施例中,其还可以包括2个关键字、4个关键字、5个关键字、6个关键字、7个关键字、8个关键字、10个关键字、15个关键字等。

请继续参阅图4所示,其应用场景为网页(知网或者淘宝网网页版等等)或app(例如,美团、大众点评等),本实施例中以淘宝网页为例,假设第一关键字为销售量,第二关键字为好评率,第三关键字为价格,以A1数据为例,A1数据加上第一指针1,其形成了第一组合数据,其中第一指针1用以在数据以销售量为关键字进行排序后,指向下一条数据;第一组合数据加上第二指针1,其形成了第二组合数据,其中第二指针1用以在数据以好评率为关键字进行排序后,指向下一条数据;第二组合数据加上第三指针1,其形成了第三组合数据,其中第三指针1用以在数据以价格为关键字进行排序后,指向下一条数据。在该实施例中,通过改变指针,数据实际上被排序了三次,但是数据的存储顺序并未发生改变,且由于指针都保留并未被擦除,因此每一次的排序数据均被保留下来,且特别是在淘宝网页这种应用场景中,用户在购物时,可以在短时间内需要以不同的关键字进行排序,例如其可能需要首先以销售量进行排序,然后再以价格进行排序,如果每一次的排序均需要重新进行计算的话,则会占用较大的资源,极易造成系统的卡顿,降低用户的体验,而在上述实施例中,其不存在上述状况,因为每次以不同的关键字进行排序时,均会增加一指针,从而该指针可以保留排序信息,系统需要调用以不同的关键字进行排序的数据时,只需要调用相应的指针即可,不需要再重新计算。

如果在一种应用场景中,不需要重复调用以一个关键字的排序,可以每次排序时,仅针对第一指针进行更改,不需要再添加第二指针等,例如当上述数据存储在ram(random access memory,随机存取存储器)中时,可以按照关键字的排序随意更改指针。

在其中一个实施例中,待排序数据为一数据块,数据块中包含数个字节的数据。例如当一条待排序数据为一个数据块,该数据块可以为一个结构体,该结构体中的包含姓名信息、性别信息、成绩信息、班级信息,且假设上述信息均为整型数据,即每个数据占据2个字节,则每条待排序数据包含8个字节。在其他实施例中,每条待排序数据可以能占据的字节数不同,例如有的待排序数据可能占据16字节,有的待排序数据可能占据64字节,有的待排序数据可能占据4字节。在其他的实施例中,例如上述所示的淘宝网页的实施例,待排序数据可能包含一个待售货物的相关介绍数据、图片数据等,其占据的字节数可能更多,或者例如知网或者soopat这种文章检索网页,其待排序数据可能包含一篇文章、作者等信息,其占据的字节数可能会更多。

在其中一个实施例中,数据存储于flash存储器(Flash存储器,英文名称是“Flash Memory”,一般简称为“Flash”)或ram存储器(random access memory,随机存取存储器)中均可以,或者也可以存储于其他形式的存储器中。

单片机芯片上面的ram(random access memory,随机存取存储器)可以随意改变。但是像是flash(Flash存储器,英文名称是“Flash Memory”,一般简称为“Flash”,它属于内存器件的一种)这样的写操作只能够从“1”写成“0”的存储设备,如果需要进数据从“0”写成“1”,则需要连续擦除一片存储空间,其不能够单独修改某一byte(字节)。因此目前这种存储器进行数据排序时,通常需要擦除一片存储空间,例如原始数据的地址是00FF00FF时,经过排序后的数据的地址为FF00FF00,此时首先需要擦除存储器中存储的00FF00FF,将其修改成为FFFFFFFF,然后再将FFFFFFFF修改为FF00FF00,其操作过程麻烦,且需要擦除一片存储区域,还改变了原始数据的地址,而在本实施例中,当数据存储于flash存储器中时,在每条待排序数据前添加指针的步骤中添加的指针的每一位均为1,这样在排序过程中,将对应指针进行修改即可,且在该实施例中,如果以不同的关键字进行排序,其可以在待排序数据前添加多个指针,分别对应不同的关键字的排序,例如上述的实施例中所述。

请参阅图5所示,图5为一实施例中数据排序装置的示意图,在该实施例中,该装置可以包括数据模块100、指针模块200和排序模块300,该指针模块200的输入端与数据模块100的输出端相连接,该排序模块300的输入端与指针模块200的输出端相连接。

数据模块100用于存储待排序数据,且在排序过程中保持待排序数据的存储位置不变。该指针模块200用于在每条待排序数据前添加指针。该排序模块300用于通过修改指针对待排序数据进行排序,使得每条排序后的数据的指针指向按照排序顺序的下一条排序后的数据的地址。

在其中一个实施例中,该指针模块200可以包括关键字识别单元和指针添加单元,该指针添加单元的输入端与关键字识别单元的输出端相连接;关键字识别单元用于获取关键字的组数;该指针添加单元用于根据关键字的组数,在每条待排序数据对应的组合数据前添加与当前排序依据的关键字对应的指针以形成组合数据。

在其中一个实施例中,待排序数据为一数据块,数据块中包含数个字节的数据。在其中一个实施例中,数据存储于flash存储器或ram存储器中。在其中一个实施例中,当数据存储于flash存储器中时,在数据排序前,在每条待排序数据前添加的指针的每一位均为1。

对该装置的具体限定可以参阅上文对方法的限定,在此不再赘述。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1