国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法和裝置與流程

      文檔序號(hào):12363769閱讀:216來源:國知局
      針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法和裝置與流程

      本發(fā)明涉及實(shí)時(shí)數(shù)據(jù)處理領(lǐng)域,特別是涉及一種針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法和裝置。



      背景技術(shù):

      隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,人們的工作和生活越來越離不開互聯(lián)網(wǎng),各種互聯(lián)網(wǎng)應(yīng)用為人們提供方便的服務(wù)。一些互聯(lián)網(wǎng)應(yīng)用所擁有的用戶量甚至達(dá)到上億級(jí)別。

      互聯(lián)網(wǎng)應(yīng)用為了實(shí)現(xiàn)用戶喜好的分析挖掘、或者某些潛在規(guī)律的分析挖掘,可能需要實(shí)時(shí)從用戶端收集相關(guān)的應(yīng)用數(shù)據(jù),并將應(yīng)用數(shù)據(jù)進(jìn)行實(shí)時(shí)排序。即,每收到新的應(yīng)用數(shù)據(jù),則立即在已排序數(shù)據(jù)的基礎(chǔ)上進(jìn)行排序。

      由于互聯(lián)網(wǎng)應(yīng)用提供的服務(wù)具有實(shí)時(shí)性,因此可能要求排序過程中已排序數(shù)據(jù)之間的順序不發(fā)生變化,因此,需要采用一種穩(wěn)定的排序方法對(duì)應(yīng)用數(shù)據(jù)進(jìn)行實(shí)時(shí)排序。而且由于互聯(lián)網(wǎng)應(yīng)用接收到的應(yīng)用數(shù)據(jù)是海量的,因此,需要采用一種效率較高的方法對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)排序。



      技術(shù)實(shí)現(xiàn)要素:

      基于此,有必要提供一種高效而穩(wěn)定的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法和裝置。

      一種針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法,包括以下步驟:

      獲取當(dāng)前上報(bào)的數(shù)據(jù);

      在已上報(bào)數(shù)據(jù)形成的多個(gè)子序列的基礎(chǔ)上對(duì)當(dāng)前數(shù)據(jù)進(jìn)行排序,所述子序列所包含的數(shù)據(jù)之間具有遵循預(yù)設(shè)的排序規(guī)則的順序關(guān)系,所述子序列之間也具有遵循該預(yù)設(shè)的排序規(guī)則的順序關(guān)系,包括以下步驟:

      判斷當(dāng)前數(shù)據(jù)按照所述預(yù)設(shè)的排序規(guī)則是否應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間;

      若當(dāng)前數(shù)據(jù)應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并使得兩個(gè)新的子序列的內(nèi)部數(shù)據(jù)之間的順序關(guān)系維持原有順序關(guān)系不變、兩個(gè)新的子序列相對(duì)于已排序數(shù)據(jù)形成的其它子序列的順序關(guān)系與被劃分的子序列相對(duì)于其它子序列的順序關(guān)系保持一致、以及兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,進(jìn)一步將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中;

      若當(dāng)前數(shù)據(jù)不應(yīng)該排列于已排序數(shù)據(jù)形成的任意一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到已形成的子序列中。

      本實(shí)施例中的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法,若當(dāng)前數(shù)據(jù)應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中,從而方便根據(jù)子序列首尾兩端的數(shù)據(jù)查找待排序數(shù)據(jù)的排列位置,可提高數(shù)據(jù)排序效率,而且上述方法對(duì)當(dāng)前上報(bào)的數(shù)據(jù)是在已排序數(shù)據(jù)形成的子序列的基礎(chǔ)上進(jìn)行排序,并不改變已排序數(shù)據(jù)之間原有的順序關(guān)系,是一種穩(wěn)定的排序方法。

      在其中一個(gè)實(shí)施中,所述在已上報(bào)數(shù)據(jù)形成的多個(gè)子序列的基礎(chǔ)上對(duì)當(dāng)前數(shù)據(jù)進(jìn)行排序的步驟包括:

      將當(dāng)前數(shù)據(jù)與已排序數(shù)據(jù)形成的各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較;

      判斷當(dāng)前數(shù)據(jù)是否大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則進(jìn)入所述以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列的步驟;

      判斷當(dāng)前數(shù)據(jù)是否大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)子序列中的任意一個(gè)子序列;

      判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于第一個(gè)子序列的前面, 若是,則按照預(yù)設(shè)的排序規(guī)則將當(dāng)前數(shù)據(jù)排列到第一個(gè)子序列中;

      判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于最后一個(gè)子序列的后面,若是,則將當(dāng)前數(shù)據(jù)形成一個(gè)新的子序列,并使得該新的子序列相對(duì)于其它已形成的子序列為最后一個(gè)子序列。

      本實(shí)施例中,將當(dāng)前數(shù)據(jù)與各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較,而不是將當(dāng)前數(shù)據(jù)與各個(gè)子序列中的每一個(gè)數(shù)據(jù)進(jìn)行比較,可減少比較次數(shù),從而提高數(shù)據(jù)排序效率。

      在其中一個(gè)實(shí)施例中,所述將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中的步驟為:

      獲取該兩個(gè)新的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中;

      將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到已形成的子序列中的步驟為:

      獲取所述已形成的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      本實(shí)施例中,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,可減小已排序數(shù)據(jù)形成的子序列的數(shù)量,從而減小當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù),從而提高了排序效率。

      在其中一個(gè)實(shí)施例中,所述方法還包括:

      判斷加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量是否大于等于閾值,若是,則將該子序列分成兩個(gè)子序列。

      本實(shí)施例中,將當(dāng)子序列的數(shù)據(jù)的數(shù)量大于等于閾值時(shí),將子序列分成兩個(gè)子序列,可減少排序時(shí)在子序列中查找的次數(shù),從而提高排序效率。

      在其中一個(gè)實(shí)施例中,所述閾值等于上報(bào)數(shù)據(jù)預(yù)估總量的兩倍的開平方。

      本實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法的時(shí)間復(fù)雜度為O(N),其中N表示上報(bào)數(shù)據(jù)預(yù)估總量,具有較低的時(shí)間復(fù)雜度。

      一種針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置,包括:

      數(shù)據(jù)獲取模塊,用于獲取當(dāng)前上報(bào)的數(shù)據(jù);

      排序模塊,用于在已上報(bào)數(shù)據(jù)形成的多個(gè)子序列的基礎(chǔ)上對(duì)當(dāng)前數(shù)據(jù)進(jìn)行排序,所述子序列所包含的數(shù)據(jù)之間具有遵循預(yù)設(shè)的排序規(guī)則的順序關(guān)系,所述子序列之間也具有遵循該預(yù)設(shè)的排序規(guī)則的順序關(guān)系;

      所述排序模塊包括以下模塊:

      位置判斷模塊,用于判斷當(dāng)前數(shù)據(jù)按照所述預(yù)設(shè)的排序規(guī)則是否應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,若是,則啟動(dòng)第一子序列劃分模塊,否則,啟動(dòng)第二排序模塊;

      第一子序列劃分模塊,用于以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并使得兩個(gè)新的子序列的內(nèi)部數(shù)據(jù)之間的順序關(guān)系維持原有順序關(guān)系不變、兩個(gè)新的子序列相對(duì)于已排序數(shù)據(jù)形成的其它子序列的順序關(guān)系與被劃分的子序列相對(duì)于其它子序列的順序關(guān)系保持一致、以及兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致;

      第一排序模塊,用于將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中;

      第二排序模塊,用于將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到已形成的子序列中。

      本實(shí)施例中的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置,若當(dāng)前數(shù)據(jù)應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中,從而方便根據(jù)子序列首尾兩端的數(shù)據(jù)查找待排序數(shù)據(jù)的排列位置,可提高數(shù)據(jù)排序效率,而且上述裝置對(duì)當(dāng)前上報(bào)的數(shù)據(jù)在已排序數(shù)據(jù)形成的子序列的基礎(chǔ)上進(jìn)行排序,并不改變已排序數(shù)據(jù)之間原有的順序關(guān)系,是一種穩(wěn)定的排序裝置。

      在其中一個(gè)實(shí)施例中,所述位置判斷模塊包括比較模塊、第一判斷模塊、第二判斷模塊、第三判斷模塊和第四判斷模塊;所述第二排序模塊包括中間插入模塊、首端插入模塊、尾端插入模塊,其中:

      所述比較模塊用于將當(dāng)前數(shù)據(jù)與已排序數(shù)據(jù)形成的各個(gè)子序列首端數(shù)據(jù)和 尾端數(shù)據(jù)進(jìn)行比較;

      所述第一判斷模塊用于判斷當(dāng)前數(shù)據(jù)是否大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則啟動(dòng)所述第一子序列劃分模塊;

      所述第二判斷模塊,用于判斷當(dāng)前數(shù)據(jù)是否大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則啟動(dòng)所述中間插入模塊;

      第三判斷模塊用于判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于第一個(gè)子序列的前面,若是,則啟動(dòng)所述首端插入模塊;

      第四判斷模塊用于判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于最后一個(gè)子序列的后面,若是,則啟動(dòng)所述尾端插入模塊;

      所述中間插入模塊用于將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到所述兩相鄰子序列中的任意一個(gè)子序列;

      所述首端插入模塊用于按照預(yù)設(shè)的排序規(guī)則將當(dāng)前數(shù)據(jù)排列到第一個(gè)子序列中

      所述尾端插入模塊用于將當(dāng)前數(shù)據(jù)形成一個(gè)新的子序列,并使得該新的子序列相對(duì)于其它已形成的子序列為最后一個(gè)子序列。

      本實(shí)施例中,將當(dāng)前數(shù)據(jù)與各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較,而不是將當(dāng)前數(shù)據(jù)與各個(gè)子序列中的每一個(gè)數(shù)據(jù)進(jìn)行比較,可減少比較次數(shù),從而提高數(shù)據(jù)排序效率。

      在其中一個(gè)實(shí)施例中,所述第一排序模塊用于獲取所述兩個(gè)新的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中;

      所述第二排序模塊用于獲取所述已形成的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      本實(shí)施例中,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,可減小已排序數(shù)據(jù)形成的子序列的數(shù)量,從而減小當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù),從而提高了排序效率。

      在其中一個(gè)實(shí)施例中,所述裝置還包括:

      數(shù)量判斷模塊,用于判斷加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量是否大于等于閾值;

      第二子序列劃分模塊,用于若加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量大于等于閾值,則將該子序列分成兩個(gè)子序列。

      本實(shí)施例中,將當(dāng)子序列的數(shù)據(jù)的數(shù)量大于等于閾值時(shí),將子序列分成兩個(gè)子序列,可減少排序時(shí)在子序列中查找的次數(shù),從而提高排序效率。

      在其中一個(gè)實(shí)施例中,所述閾值等于上報(bào)數(shù)據(jù)預(yù)估總量的兩倍的開平方。

      本實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置的時(shí)間復(fù)雜度為O(N),其中N表示上報(bào)數(shù)據(jù)預(yù)估總量,具有較低的時(shí)間復(fù)雜度。

      附圖說明

      圖1A為一個(gè)實(shí)施例中針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法的流程示意圖;

      圖1B為一個(gè)實(shí)施例中步驟S104的流程示意圖;

      圖2為另一實(shí)施例中步驟S104的流程示意圖;

      圖3為一個(gè)實(shí)施例中子序列的存儲(chǔ)示意圖;

      圖4A和圖4B為一個(gè)實(shí)施例中的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法形成子序列的示意圖;

      圖5A為一個(gè)實(shí)施例中針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置的結(jié)構(gòu)示意圖;

      圖5B為一個(gè)實(shí)施例中排序模塊52的結(jié)構(gòu)示意圖;

      圖6為另一實(shí)施例中排序模塊52的結(jié)構(gòu)示意圖;

      圖7為一個(gè)實(shí)施例中針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置的結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      如圖1A所示,在一個(gè)實(shí)施例中,一種針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法,包括以下步驟:

      步驟S102,獲取當(dāng)前上報(bào)的數(shù)據(jù)。

      在一個(gè)實(shí)施例中,可通過服務(wù)器獲取客戶端當(dāng)前上報(bào)的數(shù)據(jù)。

      步驟S104,在已上報(bào)數(shù)據(jù)形成的多個(gè)子序列的基礎(chǔ)上對(duì)當(dāng)前數(shù)據(jù)進(jìn)行排序, 子序列所包含的數(shù)據(jù)之間具有遵循預(yù)設(shè)的排序規(guī)則的順序關(guān)系,子序列之間也具有遵循該預(yù)設(shè)的排序規(guī)則的順序關(guān)系。

      上述預(yù)設(shè)的排序規(guī)則可以是從小到大的排序規(guī)則或者從大到小的排序規(guī)則等。

      一個(gè)子序列大于另一個(gè)子序列,可以認(rèn)為該子序列所包含的所有數(shù)據(jù)大于另一個(gè)子序列所包含的所有數(shù)據(jù)。

      在一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)進(jìn)行標(biāo)記,例如,可使得相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是大于相對(duì)較小的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào),或者,相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是小于相對(duì)較小的數(shù)據(jù)的標(biāo)號(hào)。例如,一個(gè)子序列所包含的數(shù)據(jù)按照數(shù)據(jù)之間的順序關(guān)系依次存儲(chǔ)在一個(gè)數(shù)組中,若數(shù)據(jù)在數(shù)組中按照從小到大的順序進(jìn)行存儲(chǔ),則下標(biāo)小的數(shù)組元素總是小于等于下標(biāo)大的數(shù)組元素;反之,若數(shù)據(jù)在數(shù)組中按照從大到小的順序進(jìn)行存儲(chǔ),則下標(biāo)小的數(shù)組元素總是大于等于下標(biāo)大的數(shù)組元素。

      在另一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的物理排列位置關(guān)系來表示。例如,可將一個(gè)子序列所包含的數(shù)據(jù)按照數(shù)據(jù)之間的順序關(guān)系依次存儲(chǔ)在一個(gè)連續(xù)的物理空間中,若數(shù)據(jù)在該物理空間中按照從小到大的順序進(jìn)行存儲(chǔ),則物理存儲(chǔ)地址小的數(shù)組元素總是小于等于物理存儲(chǔ)地址大的數(shù)組元素;反之,若數(shù)據(jù)在該物理空間中按照從大到小的順序進(jìn)行存儲(chǔ),則物理存儲(chǔ)地址小的數(shù)組元素總是大于等于物理存儲(chǔ)地址大的數(shù)組元素。

      在另一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的邏輯排列位置關(guān)系來表示。例如,可將一個(gè)子序列所包含的數(shù)據(jù)存儲(chǔ)在一個(gè)單鏈表中,若數(shù)據(jù)在該單鏈表中按照從小到大的順序進(jìn)行存儲(chǔ),則單鏈表中上一個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)總是小于等于下一個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù),反之亦然。

      在一個(gè)實(shí)施例中,子序列之間的順序關(guān)系可以用子序列對(duì)應(yīng)的標(biāo)號(hào)進(jìn)行標(biāo)記。例如,可使得相對(duì)較大的子序列對(duì)應(yīng)的標(biāo)號(hào)總是大于相對(duì)較小的子序列對(duì)應(yīng)的標(biāo)號(hào),或者,相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是小于相對(duì)較小的數(shù)據(jù)的標(biāo)號(hào)。例如,可將最小的子序列標(biāo)記為第1組、次小的子序列標(biāo)記為第2組、第三小的子序列標(biāo)識(shí)為第3組等等。

      在另一個(gè)實(shí)施例中,子序列之間的順序關(guān)系可以用相互之間的指針指向來表示,若一個(gè)子序列對(duì)應(yīng)的指針指向另一個(gè)子序列,則表示該子序列相對(duì)于另一子序列具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。例如,可將子序列用包含數(shù)據(jù)項(xiàng)和指針項(xiàng)的數(shù)據(jù)對(duì)象來表示,其中數(shù)據(jù)項(xiàng)用于存儲(chǔ)子序列包含的數(shù)據(jù),指針項(xiàng)用于指向表示另一個(gè)子序列。若子序列A對(duì)應(yīng)的指針指向子序列B,則說明子序列A相對(duì)于子序列B具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。

      如圖1B所示,在一個(gè)實(shí)施例中,步驟S104包括以下步驟:

      步驟S124,判斷獲取的當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則是否應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,若是,則執(zhí)行步驟S144,否則,執(zhí)行步驟S164。

      在一個(gè)實(shí)施例中,當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,相當(dāng)于,當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則應(yīng)該排列于兩個(gè)已排序數(shù)據(jù)的中間,且該兩個(gè)數(shù)據(jù)屬于已排序數(shù)據(jù)形成的同一個(gè)子序列中(而不是分屬于兩個(gè)不同的子序列)。

      步驟S144,以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,使得兩個(gè)新的子序列的內(nèi)部數(shù)據(jù)之間的順序關(guān)系維持原有順序關(guān)系不變、兩個(gè)新的子序列相對(duì)于已排序數(shù)據(jù)形成的其它子序列的順序關(guān)系與被劃分的子序列相對(duì)于其它子序列的順序關(guān)系保持一致、以及兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,進(jìn)入步驟S154。

      若當(dāng)前數(shù)據(jù)大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),則在該子序列中查找按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)應(yīng)該排列的位置。具體的,在一個(gè)實(shí)施例中,可按照二分查找規(guī)則查找當(dāng)前數(shù)據(jù)應(yīng)該排列的位置。

      兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,即表示,在被劃分的子序列所包含的數(shù)據(jù)之間的順序關(guān)系中,若兩個(gè)新的子序列中一個(gè)子序列(記為序列1)所包含的數(shù)據(jù)相對(duì)于另一個(gè)子序列(記為序列2)所包含的數(shù)據(jù)具有在先關(guān)系,則兩個(gè)新的子序列之間的順序關(guān)系為:該子序列(序列1)相對(duì)于該另一個(gè)子序列(序列2) 具有在先關(guān)系。

      例如,第1序列、第2序列和第3序列根據(jù)它們之間的順序關(guān)系(例如,第1序列最小、第2序列次之、第3序列最大)遵循預(yù)設(shè)的排序規(guī)則(例如,從小到大的排序規(guī)則)排列如下:第1序列{x11x12}第2序列{x21x22x23}第3序列{x31},其中各序列后面括號(hào)內(nèi)的數(shù)據(jù)表示序列所包含的數(shù)據(jù)。若將第2序列進(jìn)行劃分形成新的兩個(gè)子序列:{x21x22}和{x23},則該兩個(gè)新的子序列所包含的內(nèi)部數(shù)據(jù)的順序關(guān)系維持原有順序關(guān)系不變,例如,子序列劃分前x21相對(duì)于x22具有在先關(guān)系,子序列劃分后x21相對(duì)于x22還是具有在先關(guān)系。

      而且,該兩個(gè)新的子序列相對(duì)于原第1序列和原第3序列的順序關(guān)系與原第2序列相對(duì)于原第1序列和原第3序列的順序關(guān)系保持一致,即,若第1序列相對(duì)于被劃分的子序列具有在先關(guān)系,則第1序列相對(duì)于兩個(gè)新的子序列還是具有在先關(guān)系,第3序列相對(duì)于被劃分的子序列具有在后關(guān)系,則第3序列相對(duì)于兩個(gè)新的子序列還是具有在后關(guān)系。若用子序列對(duì)應(yīng)的標(biāo)號(hào)表示子序列之間的順序關(guān)系,則可將原第3序列標(biāo)記為第4序列,將兩個(gè)新的子序列分別標(biāo)識(shí)為第2序列和第3序列。

      另外,由于x21和x22在被劃分的子序列中相對(duì)于x23具有在先關(guān)系,因此,x21和x22對(duì)應(yīng)的子序列相對(duì)于x23對(duì)應(yīng)的子序列也具有在先關(guān)系。在將原第3序列標(biāo)記為第4序列后,可將{x21x22}對(duì)應(yīng)的子序列標(biāo)記為第2序列、將{x23}對(duì)應(yīng)的子序列標(biāo)記為第3序列。

      步驟S154,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中。

      在一個(gè)實(shí)施例中,可獲取該兩個(gè)新的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      具體的,可將當(dāng)前數(shù)據(jù)劃分到與當(dāng)前數(shù)據(jù)距離最近的數(shù)據(jù)所屬的子序列,并使得當(dāng)前數(shù)據(jù)與該子序列中其它數(shù)據(jù)的順序關(guān)系遵循上述預(yù)設(shè)的順序關(guān)系。

      例如,當(dāng)前數(shù)據(jù)為x,以上述示例為基礎(chǔ),若x與x22的距離小于x與x23的距離,則將x劃分到x22所屬的子序列中,且使得x與該子序列中其它數(shù)據(jù)的順序關(guān)系遵循上述預(yù)設(shè)的順序關(guān)系,例如,子序列所包含的數(shù)據(jù)之間的順序關(guān) 系用數(shù)據(jù)對(duì)應(yīng)的物理排列位置關(guān)系來表示,x21和x22依次存儲(chǔ)在一個(gè)連續(xù)的物理空間中,x21存儲(chǔ)在x22的位置之前,則可在該連續(xù)物理空間中將x存儲(chǔ)在x22之后。又例如,若子序列所包含的數(shù)據(jù)之間的順序關(guān)系用標(biāo)號(hào)進(jìn)行標(biāo)記,且x21對(duì)應(yīng)的標(biāo)號(hào)小于x22對(duì)應(yīng)的標(biāo)號(hào),則可設(shè)置x對(duì)應(yīng)的標(biāo)號(hào)大于x22對(duì)應(yīng)的標(biāo)號(hào)。

      步驟S164,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到已形成的子序列中。

      已形成的子序列為已上報(bào)數(shù)據(jù)形成的子序列。

      在一個(gè)實(shí)施例中,步驟S104包括以下步驟:將當(dāng)前數(shù)據(jù)與已排序數(shù)據(jù)形成的各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較;

      判斷當(dāng)前數(shù)據(jù)是否大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則執(zhí)行步驟S144和S154所述的步驟;

      判斷當(dāng)前數(shù)據(jù)是否大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)子序列中的任意一個(gè)子序列;

      判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于第一個(gè)子序列的前面,若是,則按照預(yù)設(shè)的排序規(guī)則將當(dāng)前數(shù)據(jù)排列到第一個(gè)子序列中;

      判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于最后一個(gè)子序列的后面,若是,則將當(dāng)前數(shù)據(jù)形成一個(gè)新的子序列,并使得該新的子序列相對(duì)于其它已形成的子序列為最后一個(gè)子序列。

      圖2示出了一個(gè)實(shí)施例中步驟S104的實(shí)現(xiàn)流程。如圖2所示,步驟S104包括以下步驟:

      步驟S202,判斷當(dāng)前數(shù)據(jù)是否大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則執(zhí)行步驟S204,否則,執(zhí)行步驟S206。

      步驟S204,以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,使得兩個(gè)新的子序列的內(nèi)部數(shù)據(jù)之間的順序關(guān)系維持原有順序關(guān)系不變、兩個(gè)新的子序列相對(duì)于已排序數(shù)據(jù)形成的其它子序列的順序關(guān)系與被劃分的子序列相對(duì)于其它子序列的順序關(guān)系保持一致、以及兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,進(jìn)入步驟S205。

      步驟S205,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中。

      在一個(gè)實(shí)施例中,可獲取該兩個(gè)新的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      步驟S206,判斷當(dāng)前數(shù)據(jù)是否大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則執(zhí)行步驟S208,否則,執(zhí)行步驟S210。

      當(dāng)前數(shù)據(jù)大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),相當(dāng)于,按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)應(yīng)該排列在一個(gè)子序列的尾端數(shù)據(jù)與另一個(gè)子序列的首端數(shù)據(jù)的中間,該兩個(gè)子序列相鄰,且該尾端數(shù)據(jù)與該首端數(shù)據(jù)相鄰。

      步驟S208,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩相鄰子序列中的任意一個(gè)子序列。

      在一個(gè)實(shí)施例中,可獲取該兩相鄰子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      步驟S210,判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于第一個(gè)子序列的前面,若是,則執(zhí)行步驟S212,否則,執(zhí)行步驟S214。

      步驟S212,按照預(yù)設(shè)的排序規(guī)則將當(dāng)前數(shù)據(jù)排列到第一個(gè)子序列中。

      當(dāng)前數(shù)據(jù)應(yīng)該排列于第一個(gè)子序列的前面,即相當(dāng)于,當(dāng)前數(shù)據(jù)應(yīng)該排列于第一個(gè)子序列的首端數(shù)據(jù)的前面,此種情況下,可將當(dāng)前數(shù)據(jù)排列在第一個(gè)子序列的首端數(shù)據(jù)的前面,使得當(dāng)前數(shù)據(jù)成為該第一個(gè)子序列的首端數(shù)據(jù)。

      步驟S214,判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于最后一個(gè)子序列的后面,若是,則將當(dāng)前數(shù)據(jù)形成一個(gè)新的子序列,并使得該新的子序列相對(duì)于其它已形成的子序列為最后一個(gè)子序列。

      上述實(shí)施例中,將當(dāng)前數(shù)據(jù)與各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較,而不是將當(dāng)前數(shù)據(jù)與各個(gè)子序列中的每一個(gè)數(shù)據(jù)進(jìn)行比較,可減少比較次數(shù),從而提高數(shù)據(jù)排序效率。

      上述實(shí)施例中,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到當(dāng)前數(shù)據(jù)最鄰近的 數(shù)據(jù)所屬的子序列,可減小已排序數(shù)據(jù)形成的子序列的數(shù)量,從而減小當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù),從而提高了排序效率。因?yàn)?,若同一子序列中兩個(gè)相鄰數(shù)據(jù)的距離較大,則在該兩個(gè)數(shù)據(jù)之間插入數(shù)據(jù)的機(jī)率也較大,從而將該子序列劃分成兩個(gè)新的子序列的機(jī)率也相應(yīng)增大。

      在一個(gè)實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法還包括以下步驟:按照各個(gè)子序列之間的順序關(guān)系以及子序列包含的數(shù)據(jù)之間的順序關(guān)系依次獲取子序列中包含的數(shù)據(jù)構(gòu)成有序序列,從而得到已上報(bào)數(shù)據(jù)對(duì)應(yīng)的有序序列。

      若一個(gè)子序列與另一個(gè)子序列的順序關(guān)系為:一個(gè)子序列相對(duì)于另一個(gè)子序列具有在先關(guān)系,則先獲取該子序列中的數(shù)據(jù),后獲取該另一個(gè)子序列中的數(shù)據(jù);

      而獲取各個(gè)子序列中的數(shù)據(jù)的順序則為:若一個(gè)數(shù)據(jù)相對(duì)于另一個(gè)數(shù)據(jù)具有在先關(guān)系,則先獲取該數(shù)據(jù),后獲取該另一個(gè)數(shù)據(jù)。

      上述實(shí)施例中的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法,若當(dāng)前數(shù)據(jù)應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中,從而方便根據(jù)子序列首尾兩端的數(shù)據(jù)查找待排序數(shù)據(jù)的排列位置,可提高數(shù)據(jù)排序效率;而且上述方法對(duì)當(dāng)前上報(bào)的數(shù)據(jù)在已排序數(shù)據(jù)形成的子序列的基礎(chǔ)上進(jìn)行排序,并不改變已排序數(shù)據(jù)之間原有的順序關(guān)系,是一種穩(wěn)定的排序方法。

      在一個(gè)實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法還包括以下步驟:判斷加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量是否大于等于閾值,若是,則將該子序列分成兩個(gè)子序列。

      本實(shí)施例中,將當(dāng)子序列的數(shù)據(jù)的數(shù)量大于等于閾值時(shí),將子序列分成兩個(gè)子序列,可減少排序時(shí)在子序列中查找的次數(shù),從而提高排序效率。

      在一個(gè)實(shí)施例中,該閾值等于上報(bào)數(shù)據(jù)預(yù)估總量的兩倍的開平方。即,該閾值為其中,N為上報(bào)數(shù)據(jù)預(yù)估總量。從而可使得在最糟糕的情況下本申請(qǐng)的數(shù)據(jù)排序算法的時(shí)間復(fù)雜度僅為O(N),具有較低的時(shí)間復(fù)雜度。上報(bào)數(shù)據(jù)預(yù)估總量即為預(yù)先估計(jì)的上報(bào)數(shù)據(jù)的總量。該上報(bào)數(shù)據(jù)預(yù)估總量可預(yù)先被設(shè) 置并進(jìn)行存儲(chǔ)。

      在一個(gè)實(shí)施例中,將子序列分成兩個(gè)子序列時(shí),可使得兩個(gè)新的子序列之間的數(shù)據(jù)數(shù)量相等或者相差不超過1。即,若子序列的數(shù)據(jù)數(shù)量為m,則劃分成的兩個(gè)新的子序列中,其中一個(gè)新子序列的數(shù)據(jù)數(shù)量可為m/2取整,而另一個(gè)新子序列的數(shù)量則為被劃分子序列的數(shù)據(jù)數(shù)量與該新子序列的數(shù)據(jù)數(shù)量(m/2取整)的差。

      本實(shí)施例中,將子序列對(duì)半分開,可減少子序列劃分次數(shù),從而提高排序效率。

      以下結(jié)合具體的示例來說明上述的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法。

      在一個(gè)實(shí)施例中,已排序數(shù)據(jù)形成的每一個(gè)子序列用包含數(shù)據(jù)項(xiàng)和指針項(xiàng)的一個(gè)數(shù)據(jù)對(duì)象表示;數(shù)據(jù)項(xiàng)用于存儲(chǔ)子序列包含的數(shù)據(jù),且數(shù)據(jù)項(xiàng)按照預(yù)設(shè)的排序規(guī)則存儲(chǔ)子序列包含的數(shù)據(jù),數(shù)據(jù)項(xiàng)可為固定數(shù)組或動(dòng)態(tài)數(shù)組,也可為單鏈表或雙鏈表等等;指針項(xiàng)包括前向指針和后項(xiàng)指針,前向指針用于指向相對(duì)于本子序列具有在先關(guān)系的前一子序列,后向指針用于指向相對(duì)于本子序列具有在后關(guān)系的后一子序列,該在先關(guān)系和在后關(guān)系遵循預(yù)設(shè)的排序規(guī)則。若已形成的子序列按照預(yù)設(shè)的排序規(guī)則進(jìn)行排列,兩相鄰子序列中排列在前的子序列稱為相對(duì)于排列在后的子序列具有在先關(guān)系的前一子序列,排列在后的子序列稱為相對(duì)于排列在前的子序列具有在后關(guān)系的后一子序列。

      在一個(gè)實(shí)施例中,該數(shù)據(jù)對(duì)象還包括最先標(biāo)識(shí)和最后標(biāo)識(shí),最先標(biāo)識(shí)用于標(biāo)記或指向數(shù)據(jù)項(xiàng)中存儲(chǔ)的最先數(shù)據(jù)(也即子序列的最先數(shù)據(jù)),最后標(biāo)識(shí)用于標(biāo)記或指向數(shù)據(jù)項(xiàng)中存儲(chǔ)的最后數(shù)據(jù)(也即子序列的最后數(shù)據(jù))。子序列包含的數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列,其中的第一個(gè)數(shù)據(jù)稱為子序列的最先數(shù)據(jù),而最后一個(gè)數(shù)據(jù)稱為子序列的最后數(shù)據(jù)。

      在一個(gè)實(shí)施例中,當(dāng)將一個(gè)子序列劃分成兩個(gè)新的子序列時(shí),為了描述簡便,將兩個(gè)新的子序列中在先的子序列記為a1,在后的子序列記為a2,并將被劃分子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A1,相對(duì)于被劃分子序列具有在先關(guān)系的前一子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A0,相對(duì)于被劃分子序列具有在后關(guān)系的后一子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A2。本實(shí)施例中的符號(hào)名稱僅用作標(biāo)記相關(guān)的對(duì)象以便 于描述,不用作限定本發(fā)明。

      可創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象,記為A’,用該A’存儲(chǔ)兩個(gè)新的子序列中的一個(gè)子序列,而用A1存儲(chǔ)另一個(gè)新的子序列。

      若用A’存儲(chǔ)a1,用A1存儲(chǔ)a2,則可將A’的前向指針指向A0,將A0的后向指針指向A’,以及將A’的后向指針指向A1,將A1的前向指針指向A’。

      進(jìn)一步的,用A’的數(shù)據(jù)項(xiàng)存儲(chǔ)a1,將A’的最先標(biāo)識(shí)指向a1中的最先數(shù)據(jù),將A’的最后標(biāo)識(shí)指向a1中的最后數(shù)據(jù)。

      進(jìn)一步的,在A1的數(shù)據(jù)項(xiàng)中刪除a1包含的數(shù)據(jù),則只剩下a2包含的數(shù)據(jù),并將A1的最先標(biāo)識(shí)指向a2中的最先數(shù)據(jù),而將A1的最后標(biāo)識(shí)已經(jīng)指向a2中的最后數(shù)據(jù),因?yàn)閍2的最后數(shù)據(jù)即為被劃分子序列的最后數(shù)據(jù),因此不需要修改A1的最后標(biāo)識(shí)所指向的數(shù)據(jù)。

      每當(dāng)在子序列的首端或尾端插入數(shù)據(jù)時(shí),則將該數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則存儲(chǔ)到對(duì)應(yīng)數(shù)據(jù)對(duì)象的數(shù)據(jù)項(xiàng)中,并且,若在首端插入數(shù)據(jù),則修改數(shù)據(jù)對(duì)象的最先標(biāo)識(shí),使得最先標(biāo)識(shí)指向該插入的數(shù)據(jù),若在尾端插入數(shù)據(jù),則修改數(shù)據(jù)對(duì)象的最后標(biāo)識(shí),使得最后標(biāo)識(shí)指向該插入的數(shù)據(jù)。

      在一個(gè)實(shí)施例中,已形成子序列通過頭指針或尾指針進(jìn)行訪問,該頭指針指向已形成子序列的最先子序列,尾指針指向已形成子序列的最后子序列。子序列按照預(yù)設(shè)的排序規(guī)則排列,其中的第一個(gè)子序列稱為最先子序列,而最后一個(gè)子序列稱為最后子序列。子序列按照預(yù)設(shè)的排序規(guī)則排列,在先子序列包含的所有數(shù)據(jù)相對(duì)于在后子序列包含的所有數(shù)據(jù)都具有在先關(guān)系。

      圖3為一個(gè)實(shí)施例中子序列的存儲(chǔ)示意圖。

      如圖3所示,圖3中的302、304、306都為表示子序列的數(shù)據(jù)對(duì)象,數(shù)據(jù)對(duì)象的前向指針標(biāo)記為pre,后向指針標(biāo)記為nx,最先標(biāo)識(shí)標(biāo)記為top,最后標(biāo)識(shí)標(biāo)記為bot;指向最先子序列的頭指針標(biāo)記為head,指向最后子序列的尾指針標(biāo)記為tail。

      數(shù)據(jù)對(duì)象302的數(shù)據(jù)項(xiàng)依次存儲(chǔ)數(shù)據(jù):x7、x3、x1,數(shù)據(jù)對(duì)象302的最先標(biāo)識(shí)top指向x7,最后標(biāo)識(shí)bot指向x1,說明x7相對(duì)于x3具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系,x3相對(duì)于x1具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。

      頭指針head指向數(shù)據(jù)對(duì)象302,說明數(shù)據(jù)對(duì)象302表示的子序列為各子序列遵行預(yù)設(shè)的排序規(guī)則排列時(shí)的第一個(gè)子序列。

      數(shù)據(jù)對(duì)象302的后向指針指向數(shù)據(jù)對(duì)象304,說明數(shù)據(jù)對(duì)象302存儲(chǔ)的所有數(shù)據(jù)相對(duì)于數(shù)據(jù)對(duì)象304存儲(chǔ)的所有數(shù)據(jù)都具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。

      從而,通過訪問頭指針head指向的數(shù)據(jù)對(duì)象302的最先標(biāo)識(shí)top指向的數(shù)據(jù),可獲取到最先的數(shù)據(jù)x7,依次訪問數(shù)據(jù)對(duì)象302存儲(chǔ)的其它數(shù)據(jù),按照訪問順序?qū)⒃L問的數(shù)據(jù)進(jìn)行排列得到有序序列:x7、x3、x1。然后訪問數(shù)據(jù)對(duì)象302的后向指針nx指向的數(shù)據(jù)對(duì)象304的最先標(biāo)識(shí)top指向的數(shù)據(jù),可獲取到數(shù)據(jù)x6,依次訪問數(shù)據(jù)對(duì)象304存儲(chǔ)的其它數(shù)據(jù),繼續(xù)按照訪問順序?qū)⒃L問的數(shù)據(jù)添加到有序序列,則得到有序序列:x7、x3、x1、x6、x4、x5。依此繼續(xù)訪問并排序可得到有序序列:x7、x3、x1、x6、x4、x5、x9、x8、x2。

      以下對(duì)將實(shí)時(shí)上報(bào)的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)對(duì)象中的過程加以說明。

      例如,依次獲取到實(shí)時(shí)上報(bào)的以下數(shù)據(jù):125,267,15,1,18,230,100,66,77,50,90,109,600,40,35,31,閾值被設(shè)置為5(約等于其中,16為上報(bào)數(shù)據(jù)預(yù)估總量),即當(dāng)子序列所包含的數(shù)據(jù)的數(shù)量大于等于5時(shí),則將子序列劃分成兩個(gè)新的子序列。

      依次將實(shí)時(shí)上報(bào)的數(shù)據(jù)按照從小到大的順序進(jìn)行排序,圖4A至圖4B示出了每一次排序后形成的子序列。其中,每一橫排的多個(gè)子序列表示一次排序結(jié)果。每一橫排的子序列中,從左至右排列的子序列之間遵循從小到大的順序關(guān)系。每一子序列中從上至下排列的數(shù)據(jù)遵循從小到大的順序關(guān)系。

      子序列之間的順序關(guān)系以及子序列包含的數(shù)據(jù)之間的數(shù)據(jù)關(guān)系可以用上述實(shí)施例描述的數(shù)據(jù)對(duì)象來表示。

      如圖4A至4B所示,排序迭代過程如下:

      (1)取125形成第1個(gè)子序列。

      (2)取267,由于267>125,所以將267形成一個(gè)新的子序列,并排列在第1個(gè)子序列之后。

      (3)取15,由于15<125,即15小于第1個(gè)子序列的首端數(shù)據(jù),則將15 排列在第1個(gè)子序列的首端,成為第1個(gè)子序列的新的首端數(shù)據(jù)。

      (4)取1,由于1<15,即1小于第1個(gè)子序列的首端數(shù)據(jù),則將1排列在第1個(gè)子序列的首端,成為第1個(gè)子序列的新的首端數(shù)據(jù)。

      (5)取18,由于15<18<125,因此,將第1個(gè)子序列劃分成兩個(gè)子序列{115}和{125},而且18距離15相對(duì)于18距離125更近,因此,將18劃分到15所屬的子序列,將15排列到該子序列的尾端,成為該子序列的尾端數(shù)據(jù)。

      (6)~(15)依次取230,100,66,77,50,90,109,600,40,35,按照上述方式排列到子序列中,各個(gè)數(shù)據(jù)的排列過程形成的子序列依次對(duì)應(yīng)圖4中第6至15橫排所列的子序列。

      由于第15橫排的第2個(gè)子序列的數(shù)據(jù)數(shù)量等于5,因此,將第2個(gè)子序列劃分成兩個(gè)新的子序列。

      (16)取31,由于31<35,即31小于第2個(gè)子序列的首端數(shù)據(jù),則將31排列在第2個(gè)子序列的首端,成為第2個(gè)子序列的新的首端數(shù)據(jù)。

      按照子序列之間的順序關(guān)系以及子序列包含的數(shù)據(jù)之間的順序關(guān)系訪問子序列包含的數(shù)據(jù),可得到有序序列:1,15,18,31,35,40,50,66,77,90,100,109,125,267,230,600。

      上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法中,數(shù)據(jù)比較次數(shù)包括:當(dāng)前數(shù)據(jù)與子序列所包含數(shù)據(jù)進(jìn)行比較的次數(shù),以及,當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù)。若子序列所包含的數(shù)據(jù)數(shù)量最大值為m,則與子序列所包含數(shù)據(jù)進(jìn)行比較的次數(shù)最大為: <mrow> <mi>m</mi> <mo>+</mo> <mrow> <mo>(</mo> <mi>m</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>+</mo> <mrow> <mo>(</mo> <mi>m</mi> <mo>-</mo> <mn>2</mn> <mo>)</mo> </mrow> <mo>+</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mo>+</mo> <mn>1</mn> <mo>=</mo> <mfrac> <mrow> <msup> <mi>m</mi> <mn>2</mn> </msup> <mo>+</mo> <mi>m</mi> </mrow> <mn>2</mn> </mfrac> <mo>.</mo> </mrow>

      考慮最糟糕的情況,子序列所包含的數(shù)據(jù)數(shù)量m接近上報(bào)數(shù)據(jù)預(yù)估總量N,而當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù)最大不超過上報(bào)數(shù)據(jù)預(yù)估總量N。因此,該情況下,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法的時(shí)間復(fù)雜度為O(N2)。而上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法中,當(dāng)子序列包含的數(shù)據(jù)的數(shù)量達(dá)到時(shí),即進(jìn)行了分組,因此,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序方法的時(shí)間復(fù)雜度為O(N),從而具有較高排序效率。

      如圖5A所示,在一個(gè)實(shí)施例中,一種針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置,包括數(shù)據(jù)獲取模塊50和排序模塊52,其中:

      數(shù)據(jù)獲取模塊50用于獲取當(dāng)前上報(bào)的數(shù)據(jù)。

      排序模塊52用于在已上報(bào)數(shù)據(jù)形成的多個(gè)子序列的基礎(chǔ)上對(duì)當(dāng)前數(shù)據(jù)進(jìn)行排序,子序列所包含的數(shù)據(jù)之間具有遵循預(yù)設(shè)的排序規(guī)則的順序關(guān)系,子序列之間也具有遵循該預(yù)設(shè)的排序規(guī)則的順序關(guān)系。

      該預(yù)設(shè)的排序規(guī)則可以是從小到大的排序規(guī)則或者從大到小的排序規(guī)則等。

      一個(gè)子序列大于另一個(gè)子序列,可以認(rèn)為該子序列所包含的所有數(shù)據(jù)大于另一個(gè)子序列所包含的所有數(shù)據(jù)。

      在一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)進(jìn)行標(biāo)記,例如,可使得相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是大于相對(duì)較小的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào),或者,相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是小于相對(duì)較小的數(shù)據(jù)的標(biāo)號(hào)。例如,一個(gè)子序列所包含的數(shù)據(jù)按照數(shù)據(jù)之間的順序關(guān)系依次存儲(chǔ)在一個(gè)數(shù)組中,若數(shù)據(jù)在數(shù)組中按照從小到大的順序進(jìn)行存儲(chǔ),則下標(biāo)小的數(shù)組元素總是小于等于下標(biāo)大的數(shù)組元素;反之,若數(shù)據(jù)在數(shù)組中按照從大到小的順序進(jìn)行存儲(chǔ),則下標(biāo)小的數(shù)組元素總是大于等于下標(biāo)大的數(shù)組元素。

      在另一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的物理排列位置關(guān)系來表示。例如,可將一個(gè)子序列所包含的數(shù)據(jù)按照數(shù)據(jù)之間的順序關(guān)系依次存儲(chǔ)在一個(gè)連續(xù)的物理空間中,若數(shù)據(jù)在該物理空間中按照從小到大的順序進(jìn)行存儲(chǔ),則物理存儲(chǔ)地址小的數(shù)組元素總是小于等于物理存儲(chǔ)地址大的數(shù)組元素;反之,若數(shù)據(jù)在該物理空間中按照從大到小的順序進(jìn)行存儲(chǔ),則物理存儲(chǔ)地址小的數(shù)組元素總是大于等于物理存儲(chǔ)地址大的數(shù)組元素。

      在另一個(gè)實(shí)施例中,子序列所包含的數(shù)據(jù)之間的順序關(guān)系可以用數(shù)據(jù)對(duì)應(yīng)的邏輯排列位置關(guān)系來表示。例如,可將一個(gè)子序列所包含的數(shù)據(jù)存儲(chǔ)在一個(gè)單鏈表中,若數(shù)據(jù)在該單鏈表中按照從小到大的順序進(jìn)行存儲(chǔ),則單鏈表中上一個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)總是小于等于下一個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù),反之亦然。

      在一個(gè)實(shí)施例中,子序列之間的順序關(guān)系可以用子序列對(duì)應(yīng)的標(biāo)號(hào)進(jìn)行標(biāo)記。例如,可使得相對(duì)較大的子序列對(duì)應(yīng)的標(biāo)號(hào)總是大于相對(duì)較小的子序列對(duì)應(yīng)的標(biāo)號(hào),或者,相對(duì)較大的數(shù)據(jù)對(duì)應(yīng)的標(biāo)號(hào)總是小于相對(duì)較小的數(shù)據(jù)的標(biāo)號(hào)。例如,可將最小的子序列標(biāo)記為第1組、次小的子序列標(biāo)記為第2組、第三小的子序列標(biāo)識(shí)為第3組等等。

      在另一個(gè)實(shí)施例中,子序列之間的順序關(guān)系可以用相互之間的指針指向來表示,若一個(gè)子序列對(duì)應(yīng)的指針指向另一個(gè)子序列,則表示該子序列相對(duì)于另一子序列具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。例如,可將子序列用包含數(shù)據(jù)項(xiàng)和指針項(xiàng)的數(shù)據(jù)對(duì)象來表示,其中數(shù)據(jù)項(xiàng)用于存儲(chǔ)子序列包含的數(shù)據(jù),指針項(xiàng)用于指向表示另一個(gè)子序列。若子序列A對(duì)應(yīng)的指針指向子序列B,則說明子序列A相對(duì)于子序列B具有遵循預(yù)設(shè)的排序規(guī)則的在先關(guān)系。

      如圖5B所示,在一個(gè)實(shí)施例中,排序模塊52包括位置判斷模塊522、第一子序列劃分模塊524、第一排序模塊526和第二排序模塊528,其中:

      位置判斷模塊522用于判斷獲取的當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則是否應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,若是,則啟動(dòng)第一子序列劃分模塊524,否則,啟動(dòng)第二排序模塊528。

      在一個(gè)實(shí)施例中,當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,相當(dāng)于,當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則應(yīng)該排列于兩個(gè)已排序數(shù)據(jù)的中間,且該兩個(gè)數(shù)據(jù)屬于已排序數(shù)據(jù)形成的同一個(gè)子序列中(而不是分屬于兩個(gè)不同的子序列)。

      第一子序列劃分模塊524用于以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,使得兩個(gè)新的子序列的內(nèi)部數(shù)據(jù)之間的順序關(guān)系維持原有順序關(guān)系不變、兩個(gè)新的子序列相對(duì)于已排序數(shù)據(jù)形成的其它子序列的順序關(guān)系與被劃分的子序列相對(duì)于其它子序列的順序關(guān)系保持一致、以及兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,進(jìn)一步的,啟動(dòng)第一排序模塊526。

      在一個(gè)實(shí)施例中,第一子序列劃分模塊524用于若當(dāng)前數(shù)據(jù)大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),則在該子序列中查找按 照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)應(yīng)該排列的位置。具體的,在一個(gè)實(shí)施例中,可按照二分查找規(guī)則查找當(dāng)前數(shù)據(jù)應(yīng)該排列的位置。

      兩個(gè)新的子序列之間的順序關(guān)系與該兩個(gè)新的子序列所包含的數(shù)據(jù)在被劃分的子序列中的順序關(guān)系保持一致,即表示,在被劃分的子序列所包含的數(shù)據(jù)之間的順序關(guān)系中,若兩個(gè)新的子序列中一個(gè)子序列(記為序列1)所包含的數(shù)據(jù)相對(duì)于另一個(gè)子序列(記為序列2)所包含的數(shù)據(jù)具有在先關(guān)系,則兩個(gè)新的子序列之間的順序關(guān)系為:該子序列(序列1)相對(duì)于該另一個(gè)子序列(序列2)具有在先關(guān)系。

      第一排序模塊526用于將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中。

      在一個(gè)實(shí)施例中,第一排序模塊526可獲取該兩個(gè)新的子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      具體的,第一排序模塊526可將當(dāng)前數(shù)據(jù)劃分到與當(dāng)前數(shù)據(jù)距離最近的數(shù)據(jù)所屬的子序列,并使得當(dāng)前數(shù)據(jù)與該子序列中其它數(shù)據(jù)的順序關(guān)系遵循上述預(yù)設(shè)的順序關(guān)系。

      第二排序模塊528將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到已形成的子序列中。

      已形成的子序列為已上報(bào)數(shù)據(jù)形成的子序列。

      如圖6所示,位置判斷模塊522包括比較模塊602、第一判斷模塊604、第二判斷模塊606、第三判斷模塊608和第四判斷模塊610;第二排序模塊528包括中間插入模塊612、首端插入模塊614、尾端插入模塊616,其中:

      比較模塊602用于將當(dāng)前數(shù)據(jù)與已排序數(shù)據(jù)形成的各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較。

      第一判斷模塊604用于判斷當(dāng)前數(shù)據(jù)是否大于一子序列首端數(shù)據(jù)和尾端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則啟動(dòng)第一子序列劃分模塊524。

      第二判斷模塊606,用于判斷當(dāng)前數(shù)據(jù)是否大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),若是,則啟動(dòng)中間插入模塊612。

      第三判斷模塊608用于判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于第一個(gè)子序列的前面,若是,則啟動(dòng)首端插入模塊614。

      第四判斷模塊610用于判斷按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)是否應(yīng)該排列于最后一個(gè)子序列的后面,若是,則啟動(dòng)尾端插入模塊616。

      中間插入模塊612用于將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到兩相鄰子序列中的任意一個(gè)子序列。

      當(dāng)前數(shù)據(jù)大于兩相鄰子序列的相鄰尾端數(shù)據(jù)和首端數(shù)據(jù)中的一個(gè)數(shù)據(jù)而小于另一個(gè)數(shù)據(jù),相當(dāng)于,按照預(yù)設(shè)的排序規(guī)則當(dāng)前數(shù)據(jù)應(yīng)該排列在一個(gè)子序列的尾端數(shù)據(jù)與另一個(gè)子序列的首端數(shù)據(jù)的中間,該兩個(gè)子序列相鄰,且該尾端數(shù)據(jù)與該首端數(shù)據(jù)相鄰。

      在一個(gè)實(shí)施例中,中間插入模塊612可將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩相鄰子序列中的任意一個(gè)子序列。在一個(gè)實(shí)施例中,中間插入模塊612可獲取該兩相鄰子序列中與當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該所屬的子序列中。

      首端插入模塊614用于按照預(yù)設(shè)的排序規(guī)則將當(dāng)前數(shù)據(jù)排列到第一個(gè)子序列中。

      當(dāng)前數(shù)據(jù)應(yīng)該排列于第一個(gè)子序列的前面,即相當(dāng)于,當(dāng)前數(shù)據(jù)應(yīng)該排列于第一個(gè)子序列的首端數(shù)據(jù)的前面,此種情況下,首端插入模塊614可將當(dāng)前數(shù)據(jù)排列在第一個(gè)子序列的首端數(shù)據(jù)的前面,使得當(dāng)前數(shù)據(jù)成為該第一個(gè)子序列的首端數(shù)據(jù)。

      尾端插入模塊616用于將當(dāng)前數(shù)據(jù)形成一個(gè)新的子序列,并使得該新的子序列相對(duì)于其它已形成的子序列為最后一個(gè)子序列。

      上述實(shí)施例中,將當(dāng)前數(shù)據(jù)與各個(gè)子序列首端數(shù)據(jù)和尾端數(shù)據(jù)進(jìn)行比較,而不是將當(dāng)前數(shù)據(jù)與各個(gè)子序列中的每一個(gè)數(shù)據(jù)進(jìn)行比較,可減少比較次數(shù),從而提高數(shù)據(jù)排序效率。

      上述實(shí)施例中,將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到當(dāng)前數(shù)據(jù)最鄰近的數(shù)據(jù)所屬的子序列,可減小已排序數(shù)據(jù)形成的子序列的數(shù)量,從而減小當(dāng)前數(shù)據(jù)與子序列的首端數(shù)據(jù)和尾端數(shù)據(jù)比較的次數(shù),從而提高了排序效率。因?yàn)椋? 若同一子序列中兩個(gè)相鄰數(shù)據(jù)的距離較大,則在該兩個(gè)數(shù)據(jù)之間插入數(shù)據(jù)的機(jī)率也較大,從而將該子序列劃分成兩個(gè)新的子序列的機(jī)率也相應(yīng)增大。

      在一個(gè)實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置還包括有序序列構(gòu)成模塊(圖中未示出),用于按照各個(gè)子序列之間的順序關(guān)系以及子序列包含的數(shù)據(jù)之間的順序關(guān)系依次獲取子序列中包含的數(shù)據(jù)構(gòu)成有序序列,從而得到已上報(bào)數(shù)據(jù)對(duì)應(yīng)的有序序列。

      若一個(gè)子序列與另一個(gè)子序列的順序關(guān)系為:一個(gè)子序列相對(duì)于另一個(gè)子序列具有在先關(guān)系,則先獲取該子序列中的數(shù)據(jù),后獲取該另一個(gè)子序列中的數(shù)據(jù);

      而獲取各個(gè)子序列中的數(shù)據(jù)的順序則為:若一個(gè)數(shù)據(jù)相對(duì)于另一個(gè)數(shù)據(jù)具有在先關(guān)系,則先獲取該數(shù)據(jù),后獲取該另一個(gè)數(shù)據(jù)。

      上述實(shí)施例中的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置,若當(dāng)前數(shù)據(jù)應(yīng)該排列于已排序數(shù)據(jù)形成的同一個(gè)子序列的兩個(gè)數(shù)據(jù)的中間,則以當(dāng)前數(shù)據(jù)應(yīng)該排列的位置為劃分點(diǎn)將該位置所處的子序列劃分成兩個(gè)新的子序列,并將當(dāng)前數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列到該兩個(gè)新的子序列中的任意一個(gè)子序列中,從而方便根據(jù)子序列首尾兩端的數(shù)據(jù)查找待排序數(shù)據(jù)的排列位置,可提高數(shù)據(jù)排序效率;而且上述裝置對(duì)當(dāng)前上報(bào)的數(shù)據(jù)在已排序數(shù)據(jù)形成的子序列的基礎(chǔ)上進(jìn)行排序,并不改變已排序數(shù)據(jù)之間原有的順序關(guān)系,是一種穩(wěn)定的排序裝置。

      如圖7所示,在一個(gè)實(shí)施例中,上述針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置還包括數(shù)量判斷模塊702和第二子序列劃分模塊704,其中:

      數(shù)量判斷模塊702用于判斷加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量是否大于等于閾值。

      第二子序列劃分模塊704用于若加入當(dāng)前數(shù)據(jù)的子序列所包含的數(shù)據(jù)的數(shù)量大于等于閾值,則將該子序列分成兩個(gè)子序列。

      本實(shí)施例中,將當(dāng)子序列的數(shù)據(jù)的數(shù)量大于等于閾值時(shí),將子序列分成兩個(gè)子序列,可減少排序時(shí)在子序列中查找的次數(shù),從而提高排序效率。

      在一個(gè)實(shí)施例中,該閾值等于上報(bào)數(shù)據(jù)預(yù)估總量的兩倍的開平方。即,該閾值為其中,N為上報(bào)數(shù)據(jù)預(yù)估總量。從而可使得在最糟糕的情況下本 申請(qǐng)的數(shù)據(jù)排序算法的時(shí)間復(fù)雜度僅為O(N),具有較低的時(shí)間復(fù)雜度。上報(bào)數(shù)據(jù)預(yù)估總量即為預(yù)先估計(jì)的上報(bào)數(shù)據(jù)的總量。該上報(bào)數(shù)據(jù)預(yù)估總量可預(yù)先被設(shè)置并進(jìn)行存儲(chǔ)。

      在一個(gè)實(shí)施例中,第二子序列劃分模塊704將子序列分成兩個(gè)子序列時(shí),可使得兩個(gè)新的子序列之間的數(shù)據(jù)數(shù)量相等或者相差不超過1。即,若子序列的數(shù)據(jù)數(shù)量為m,則劃分成的兩個(gè)新的子序列中,其中一個(gè)新子序列的數(shù)據(jù)數(shù)量可為m/2取整,而另一個(gè)新子序列的數(shù)量則為被劃分子序列的數(shù)據(jù)數(shù)量與該新子序列的數(shù)據(jù)數(shù)量(m/2取整)的差。

      本實(shí)施例中,將子序列對(duì)半分開,可減少子序列劃分次數(shù),從而提高排序效率。

      以下結(jié)合具體的示例來說明上述的針對(duì)實(shí)時(shí)上報(bào)數(shù)據(jù)的實(shí)時(shí)排序裝置。

      在一個(gè)實(shí)施例中,已排序數(shù)據(jù)形成的每一個(gè)子序列用包含數(shù)據(jù)項(xiàng)和指針項(xiàng)的一個(gè)數(shù)據(jù)對(duì)象表示;數(shù)據(jù)項(xiàng)用于存儲(chǔ)子序列包含的數(shù)據(jù),且數(shù)據(jù)項(xiàng)按照預(yù)設(shè)的排序規(guī)則存儲(chǔ)子序列包含的數(shù)據(jù),數(shù)據(jù)項(xiàng)可為固定數(shù)組或動(dòng)態(tài)數(shù)組,也可為單鏈表或雙鏈表等等;指針項(xiàng)包括前向指針和后項(xiàng)指針,前向指針用于指向相對(duì)于本子序列具有在先關(guān)系的前一子序列,后向指針用于指向相對(duì)于本子序列具有在后關(guān)系的后一子序列,該在先關(guān)系和在后關(guān)系遵循預(yù)設(shè)的排序規(guī)則。若已形成的子序列按照預(yù)設(shè)的排序規(guī)則進(jìn)行排列,兩相鄰子序列中排列在前的子序列稱為相對(duì)于排列在后的子序列具有在先關(guān)系的前一子序列,排列在后的子序列稱為相對(duì)于排列在前的子序列具有在后關(guān)系的后一子序列。

      在一個(gè)實(shí)施例中,該數(shù)據(jù)對(duì)象還包括最先標(biāo)識(shí)和最后標(biāo)識(shí),最先標(biāo)識(shí)用于標(biāo)記或指向數(shù)據(jù)項(xiàng)中存儲(chǔ)的最先數(shù)據(jù)(也即子序列的最先數(shù)據(jù)),最后標(biāo)識(shí)用于標(biāo)記或指向數(shù)據(jù)項(xiàng)中存儲(chǔ)的最后數(shù)據(jù)(也即子序列的最后數(shù)據(jù))。子序列包含的數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則排列,其中的第一個(gè)數(shù)據(jù)稱為子序列的最先數(shù)據(jù),而最后一個(gè)數(shù)據(jù)稱為子序列的最后數(shù)據(jù)。

      在一個(gè)實(shí)施例中,當(dāng)將一個(gè)子序列劃分成兩個(gè)新的子序列時(shí),為了描述簡便,將被劃分子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A1,相對(duì)于被劃分子序列具有在先關(guān)系的前一子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A0,相對(duì)于被劃分子序列具有在后關(guān)系的 后一子序列對(duì)應(yīng)的數(shù)據(jù)對(duì)象記為A2;并且將兩個(gè)新的子序列中在先的子序列記為a1,在后的子序列記為a2。本實(shí)施例中的符號(hào)名稱僅用作標(biāo)記相關(guān)的對(duì)象以便于描述,不用作限定本發(fā)明。

      第一子序列劃分模塊524和第二子序列劃分模塊704可創(chuàng)建一個(gè)新的數(shù)據(jù)對(duì)象,記為A’,用該A’存儲(chǔ)兩個(gè)新的子序列中的一個(gè)子序列,而用A1存儲(chǔ)另一個(gè)新的子序列。

      若用A’存儲(chǔ)a1,用A1存儲(chǔ)a2,則可將A’的前向指針指向A0,將A0的后向指針指向A’,以及將A’的后向指針指向A1,將A1的前向指針指向A’。

      進(jìn)一步的,用A’的數(shù)據(jù)項(xiàng)存儲(chǔ)a1,將A’的最先標(biāo)識(shí)指向a1中的最先數(shù)據(jù),將A’的最后標(biāo)識(shí)指向a1中的最后數(shù)據(jù)。

      進(jìn)一步的,在A1的數(shù)據(jù)項(xiàng)中刪除a1包含的數(shù)據(jù),則只剩下a2包含的數(shù)據(jù),并將A1的最先標(biāo)識(shí)指向a2中的最先數(shù)據(jù),而將A1的最后標(biāo)識(shí)已經(jīng)指向a2中的最后數(shù)據(jù),因?yàn)閍2的最后數(shù)據(jù)即為被劃分子序列的最后數(shù)據(jù),因此不需要修改A1的最后標(biāo)識(shí)所指向的數(shù)據(jù)。

      若用A’存儲(chǔ)a2,用A1存儲(chǔ)a1的情況依次類推,在此不再贅述。

      第一排序模塊526和第二排序模塊528每當(dāng)在子序列的首端或尾端插入數(shù)據(jù)時(shí),可將該數(shù)據(jù)按照預(yù)設(shè)的排序規(guī)則存儲(chǔ)到對(duì)應(yīng)數(shù)據(jù)對(duì)象的數(shù)據(jù)項(xiàng)中,并且,若在首端插入數(shù)據(jù),則修改數(shù)據(jù)對(duì)象的最先標(biāo)識(shí),使得最先標(biāo)識(shí)指向該插入的數(shù)據(jù),若在尾端插入數(shù)據(jù),則修改數(shù)據(jù)對(duì)象的最后標(biāo)識(shí),使得最后標(biāo)識(shí)指向該插入的數(shù)據(jù)。

      在一個(gè)實(shí)施例中,已形成子序列通過頭指針或尾指針進(jìn)行訪問,該頭指針指向已形成子序列的最先子序列,尾指針指向已形成子序列的最后子序列。子序列按照預(yù)設(shè)的排序規(guī)則排列,其中的第一個(gè)子序列稱為最先子序列,而最后一個(gè)子序列稱為最后子序列。子序列按照預(yù)設(shè)的排序規(guī)則排列,在先子序列包含的所有數(shù)據(jù)相對(duì)于在后子序列包含的所有數(shù)據(jù)都具有在先關(guān)系。

      以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技 術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。

      以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1