本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)排序方法和裝置。
背景技術(shù):
目前存在多種排序算法,例如“冒泡排序”、“簡單選擇排序”、“直接插入排序”、“堆排序”、“希爾排序”等等,但該些排序均是在單片機芯片上面進行排序的,單片機芯片上面的ram(random access memory,隨機存取存儲器)可以隨意改變。但是像是flash(Flash存儲器,英文名稱是“Flash Memory”,一般簡稱為“Flash”,它屬于內(nèi)存器件的一種)這樣的寫操作只能夠從“1”寫成“0”的存儲設(shè)備,如果需要將數(shù)據(jù)從“0”寫成“1”,則需要連續(xù)擦除一片存儲空間,其不能夠單獨修改某一byte(字節(jié))。
技術(shù)實現(xiàn)要素:
基于此,有必要提供一種數(shù)據(jù)排序方法和裝置,其可以根據(jù)需要,在不連續(xù)擦除一片存儲空間的前提下,對寫操作只能夠從“1”寫成“0”的存儲設(shè)備中存儲的數(shù)據(jù)進行排序。
一種數(shù)據(jù)排序方法,待排序數(shù)據(jù)存儲于第一存儲器中的源數(shù)據(jù)區(qū),所述方法包括:
在隨機存取存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,以標志所述源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序;或者在所述第一存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,且當(dāng)設(shè)置在所述第一存儲器中的標志位為1時,標志所述源數(shù)據(jù)區(qū)的相應(yīng)的待排序數(shù)據(jù)已排序;
在排序過程中判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序;
當(dāng)與該標志位相對應(yīng)的待排序數(shù)據(jù)未排序時,對該待排序數(shù)據(jù)進行排序后,改變相應(yīng)標志位,并將已排序的數(shù)據(jù)按照排序順序存儲在所述第一存儲器的排序數(shù)據(jù)區(qū)。
在其中一個實施例中,所述源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)為一數(shù)據(jù)塊,所述數(shù)據(jù)塊中包含數(shù)個字節(jié)的數(shù)據(jù);
所述在隨機存取存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位的步驟,具體包括:
在隨機存取存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位;
所述在所述第一存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位的步驟,具體包括:
在所述第一存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位。
在其中一個實施例中,當(dāng)所述標志位設(shè)置在所述隨機存取存儲器中時,所述判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序的步驟,具體為:判斷每條排序數(shù)據(jù)所對應(yīng)的標志位是否為1;
當(dāng)所述標志位設(shè)置在所述第一存儲器中,且設(shè)置在所述第一存儲器中的標志位為1時標志所述源數(shù)據(jù)區(qū)的相應(yīng)的待排序數(shù)據(jù)已排序時,所述判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序的步驟,具體為:
判斷每條待排序數(shù)據(jù)所對應(yīng)的標志位是否為0。
在其中一個實施例中,所述方法包括:
在所有待排序數(shù)據(jù)均排序完成后,擦除源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)。
在其中一個實施例中,所述第一存儲器為寫操作只能將數(shù)據(jù)從“1”寫成“0”的存儲設(shè)備。
一種排序裝置,待排序數(shù)據(jù)存儲于第一存儲器中的源數(shù)據(jù)區(qū),所述裝置包括:
標志位設(shè)置模塊,用于在隨機存取存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,以標志所述源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序;或者在所述第一存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,且當(dāng)設(shè)置在所述第一存儲器中的標志位為1時,標志所述源數(shù)據(jù)區(qū)的相應(yīng)的待排序數(shù)據(jù)已排序;
標志位判斷模塊,該標志位判斷模塊的輸入端與標志位設(shè)置模塊的輸出端相連接,該標志位判斷模塊用于在排序過程中判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序;
排序模塊,該排序模塊的輸入端與所述標志位判斷模塊的輸出端相連接,該排序模塊用于當(dāng)與該標志位相對應(yīng)的待排序數(shù)據(jù)未排序時,對該待排序數(shù)據(jù)進行排序后,改變相應(yīng)標志位,并將已排序的數(shù)據(jù)按照排序順序存儲在所述第一存儲器的排序數(shù)據(jù)區(qū)。
在其中一個實施例中,所述裝置還包括:
數(shù)據(jù)塊判斷模塊,所述數(shù)據(jù)塊判斷模塊的輸出端與所述標志位設(shè)置模塊的輸入端相連接,所述數(shù)據(jù)塊判斷模塊用于將所述源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)以數(shù)據(jù)塊為單元進行劃分,所述數(shù)據(jù)塊中包含數(shù)個字節(jié)的數(shù)據(jù)。
在其中一個實施例中,所述標志位設(shè)置模塊還用于設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位。
在其中一個實施例中,所述裝置還包括:
數(shù)據(jù)擦除模塊,所述數(shù)據(jù)擦除模塊的輸入端與所述排序模塊的輸出端相連接,所述數(shù)據(jù)擦除模塊用于在所有待排序數(shù)據(jù)均排序完成后,擦除源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)。
在其中一個實施例中,所述第一存儲器是寫操作只能將數(shù)據(jù)從“1”寫成“0”的存儲設(shè)備。
上述的數(shù)據(jù)排序方法和裝置,通過設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位以標志所述源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序,且將已排序的數(shù)據(jù)按照排序順序存儲在第一存儲器的排序數(shù)據(jù)區(qū),從而不需要連續(xù)擦除一片存儲空間,不會因排序造成卡頓的現(xiàn)象。
附圖說明
圖1為一實施例中數(shù)據(jù)排序方法的流程圖;
圖2為另一實施例中數(shù)據(jù)排序方法的流程圖;
圖3為圖1所示數(shù)據(jù)排序方法的一應(yīng)用圖;
圖4為圖1所示數(shù)據(jù)排序方法的另一應(yīng)用圖;
圖5為一實施例中排序裝置的結(jié)構(gòu)示意圖。
其中,
100 標志位設(shè)置模塊
200 標志位判斷模塊
300 排序模塊
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用于解釋本發(fā)明,并不用于限定本發(fā)明。
在詳細說明根據(jù)本發(fā)明的實施例前,應(yīng)該注意到的是,所述的實施例主要在于與數(shù)據(jù)排序方法和裝置相關(guān)的步驟和系統(tǒng)組件的組合。因此,所屬系統(tǒng)組件和方法步驟已經(jīng)在附圖中通過常規(guī)符號在適當(dāng)?shù)奈恢帽硎境鰜砹?,并且只示出了與理解本發(fā)明的實施例有關(guān)的細節(jié),以免因?qū)τ诘靡嬗诒景l(fā)明的本領(lǐng)域普通技術(shù)人員而言顯而易見的那些細節(jié)模糊了本發(fā)明的公開內(nèi)容。
在本文中,諸如左和右,上和下,前和后,第一和第二之類的關(guān)系術(shù)語僅僅用來區(qū)分一個實體或動作與另一個實體或動作,而不一定要求或暗示這種實體或動作之間的任何實際的這種關(guān)系或順序。術(shù)語“包括”、“包含”或任何其他變體旨在涵蓋非排他性的包含,由此使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包含這些要素,而且還包含沒有明確列出的其他要素,或者為這種過程、方法、物品或者設(shè)備所固有的要素。
術(shù)語“第一存儲器”是指寫操作只能把數(shù)據(jù)從“1”寫成“0”的存儲設(shè)備,例如flash(Flash存儲器,英文名稱是“Flash Memory”,一般簡稱為“Flash”)等。
請參閱圖1至圖3所示,圖1為一實施例中數(shù)據(jù)排序方法的流程圖,圖2為另一實施例中數(shù)據(jù)排序方法的流程圖。圖3為圖1所示數(shù)據(jù)排序方法的一應(yīng)用圖。在該實施例中,待排序數(shù)據(jù)存儲于存儲器中的源數(shù)據(jù)區(qū),該方法可以包括:
S102:在隨機存取存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,以標志源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序。
請參閱圖3所示,圖3中第一排為源數(shù)據(jù)區(qū),其中存儲待排序數(shù)據(jù),第二排為對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,在該實施例中,標志位存儲在隨機存取存儲器中,如果隨機存取存儲器中的數(shù)據(jù)默認全是0,表示所有數(shù)據(jù)均還未排序,當(dāng)待排序數(shù)據(jù)排序后,對應(yīng)的隨機存取存儲器中的標志位就會置1。第三排為排序數(shù)據(jù)區(qū)。
在其中一個實施例中,當(dāng)標志位存儲在隨機存取存儲器中時,還可以通過1表示數(shù)據(jù)未排序,0表示數(shù)據(jù)已排序,即當(dāng)隨機存取存儲器中的數(shù)據(jù)默認全是1時,表示所有數(shù)據(jù)均還未排序,當(dāng)待排序數(shù)據(jù)排序后,對應(yīng)隨機存取存儲器中的標志位就會置0。
在另外的一個實施例中,該步驟S102也可以為如圖2所示的步驟S202,在第一存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,且當(dāng)設(shè)置在第一存儲器中的標志位為1時,標志所述源數(shù)據(jù)區(qū)的相應(yīng)的待排序數(shù)據(jù)已排序,即當(dāng)源數(shù)據(jù)區(qū)中的數(shù)據(jù)全是1時,表示所有數(shù)據(jù)均未排序,當(dāng)待排序數(shù)據(jù)排序后,對應(yīng)的標志位則置0。
在上述實施例中,每條待排序數(shù)據(jù)均對應(yīng)于一個標志位。
S104:在排序過程中判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序??梢詤㈤唸D3所示,圖3中對應(yīng)于待排序數(shù)據(jù)A4的標志位為1,則表示該待排序數(shù)據(jù)已經(jīng)排序過了,對應(yīng)于待排序數(shù)據(jù)A1的標志位為0,則表示該待排序數(shù)據(jù)還未排序過。在其他的實施例中,還可以當(dāng)標志位為0時表示待排序數(shù)據(jù)已經(jīng)排序過,而標志位為1時代表待排序數(shù)據(jù)未排序過;或者還可以采用其他的標志方式。
S106:當(dāng)與該標志位相對應(yīng)的待排序數(shù)據(jù)未排序時,對該待排序數(shù)據(jù)進行排序后,改變相應(yīng)標志位,并將已排序的數(shù)據(jù)按照排序順序存儲在第一存儲器的排序數(shù)據(jù)區(qū)。
上述的數(shù)據(jù)排序方法,通過設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位以標志所述源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序,且將已排序的數(shù)據(jù)按照排序順序存儲在第一存儲器的排序數(shù)據(jù)區(qū),從而不需要連續(xù)擦除一片存儲空間,不會因排序造成卡頓的現(xiàn)象。
在其中一個實施例中,源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)為一數(shù)據(jù)塊,數(shù)據(jù)塊中包含數(shù)個字節(jié)的數(shù)據(jù)。在隨機存取存儲器中設(shè)置對應(yīng)于所述源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位的步驟,具體可以包括:在隨機存取存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位。在第一存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位的步驟,具體可以包括:在第一存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位。
其中,一個數(shù)據(jù)塊可以包括多個數(shù)據(jù),例如其可以包含姓名、性別、成績等,一個數(shù)據(jù)塊可以看成為一個結(jié)構(gòu)體,其可以包含數(shù)個字節(jié)的數(shù)據(jù);在其他的實施例中,例如網(wǎng)站中瀏覽結(jié)果的排序,每條待排序數(shù)據(jù)為一個數(shù)據(jù)塊,其可以包括文章的名稱、瀏覽量、摘要等;或者可以包括物品名稱、瀏覽量、成交量等,即在該實施例中一條待排序數(shù)據(jù)并不是僅指一個字節(jié)的數(shù)據(jù),其可能是一篇文章、一個待售物品等,可以包含多個字節(jié)。
在上述的實施例中,例如圖4所示,圖4為圖1所示數(shù)據(jù)排序方法的另一應(yīng)用圖,例如一條待排序數(shù)據(jù)為一個數(shù)據(jù)塊,該數(shù)據(jù)塊為一個結(jié)構(gòu)體,該結(jié)構(gòu)體中包含姓名信息、性別信息、成績信息、班級信息,且假設(shè)上述信息均為整型數(shù)據(jù),即每個數(shù)據(jù)占據(jù)2個字節(jié),則每條待排序數(shù)據(jù)包含8個字節(jié),與該條待排序數(shù)據(jù)對應(yīng)的標志位為1位,即1bit,換句話說即用隨機存取存儲器中1bit即可以對應(yīng)第一存儲器中8字節(jié)的待排序數(shù)據(jù),因此隨機存取存儲器中的標志位僅需要一小塊存儲區(qū)域即可。在其他實施例中,每條待排序數(shù)據(jù)可能占據(jù)的字節(jié)數(shù)不同,例如有的待排序數(shù)據(jù)可能占據(jù)16字節(jié),其標志位仍為1位,有的待排序數(shù)據(jù)可能占據(jù)64字節(jié),其標志位仍為1位,有的待排序數(shù)據(jù)可能占據(jù)4字節(jié),其標志位也為1位,在此不再贅述。
在其中一個實施例中,上述方法還可以包括:在所有待排序數(shù)據(jù)均排序完成后,擦除源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)。由于第一存儲器中既包括源數(shù)據(jù)區(qū)又包括排序數(shù)據(jù)區(qū),即一個數(shù)據(jù)存儲了兩遍,造成了存儲空間的浪費,因此在所有待排序數(shù)據(jù)排序完成后,可以擦除源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù),這樣可以節(jié)省存儲空間,且此時不用擔(dān)心連續(xù)的擦除會造成信息的誤刪除等。在其他的實施例中,由于隨著科技的發(fā)展,存儲設(shè)備的價格也越來越低,如果當(dāng)前存儲空間較大,可以不擦除源數(shù)據(jù)區(qū)的數(shù)據(jù),這樣可以保留原始數(shù)據(jù),以便后續(xù)需要的時候查看,例如,在網(wǎng)頁應(yīng)用或APP中,以淘寶網(wǎng)為例,假設(shè)用戶首先輸入“杯子”這個關(guān)鍵字,可能網(wǎng)頁會默認以銷售量這個關(guān)鍵字進行排序,此時第一排序區(qū)的數(shù)據(jù)示意銷售量進行排序的,而用戶需要的是以“價格”這個關(guān)鍵字進行排序,則上述內(nèi)容又會在第二排序區(qū)以“價格”進行排序,此時可以不刪除原第一排序區(qū)的內(nèi)容,因為用戶可能在看完以“價格”為關(guān)鍵字的排序后,又想看以“銷售量”為關(guān)鍵字的排序,如果此時再一次進行排序,則很容易造成卡頓的現(xiàn)象,而如果將先前排序的內(nèi)容保存下來的話,則直接調(diào)取即可,不需要再次進行排序,節(jié)省了內(nèi)存。
請參閱圖5所示,圖5為一實施例中排序裝置的結(jié)構(gòu)示意圖,待排序數(shù)據(jù)存儲于第一存儲器中的源數(shù)據(jù)區(qū),該裝置可以包括標志位設(shè)置模塊100、標志位判斷模塊200以及排序模塊300,該標志位判斷模塊200的輸入端與標志位設(shè)置模塊100的輸出端相連接,該排序模塊300的輸入端與標志位判斷模塊200的輸出端相連接。
該標志位設(shè)置模塊100用于在隨機存取存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,以標志源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)是否已排序,或者在第一存儲器中設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的待排序數(shù)據(jù)的標志位,且當(dāng)設(shè)置在第一存儲器中的標志位為1時,標志源數(shù)據(jù)區(qū)的相應(yīng)的待排序數(shù)據(jù)已排序。該標志位判斷模塊200用于在排序過程中判斷源數(shù)據(jù)區(qū)的每條待排序數(shù)據(jù)所對應(yīng)的標志位是否標志該待排序數(shù)據(jù)已排序。該排序模塊300用于當(dāng)與該標志位相對應(yīng)的待排序數(shù)據(jù)未排序時,對該待排序數(shù)據(jù)進行排序后,改變相應(yīng)標志位,并將已排序的數(shù)據(jù)按照排序順序存儲在第一存儲器的排序數(shù)據(jù)區(qū)。
在其中一個實施例中,裝置還可以包括數(shù)據(jù)塊判斷模塊,該數(shù)據(jù)塊判斷模塊的輸出端與標志位設(shè)置模塊100的輸入端相連接,數(shù)據(jù)塊判斷模塊用于將源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)以數(shù)據(jù)塊為單元進行劃分,數(shù)據(jù)塊中包含數(shù)個字節(jié)的數(shù)據(jù)。
在其中一個實施例中,標志位設(shè)置模塊100還可以用于設(shè)置對應(yīng)于源數(shù)據(jù)區(qū)的每條數(shù)據(jù)塊的標志位。
在其中一個實施例中,裝置還可以包括數(shù)據(jù)擦除模塊。數(shù)據(jù)擦除模塊的輸入端與排序模塊300的輸出端相連接,數(shù)據(jù)擦除模塊用于在所有待排序數(shù)據(jù)均排序完成后,擦除源數(shù)據(jù)區(qū)存儲的待排序數(shù)據(jù)。
對該裝置的具體限定可以參閱上文對方法的限定,在此不再贅述。
以上所述實施例的各技術(shù)特征可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認為是本說明書記載的范圍。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應(yīng)以所附權(quán)利要求為準。