演算法、排序(11)

來源:互聯網
上載者:User

基數排序 


     基數排序(Radix Sort)是對箱排序的改進和推廣。


1、單關鍵字和多關鍵字


     檔案中任一記錄R[i]的關鍵字均由d個分量
                    

構成。
若這d個分量中每個分量都是一個獨立的關鍵字,則檔案是多關鍵字的(如撲克牌有兩個關鍵字:點數和花色);否則檔案是單關鍵字的,
              

(0≤j<d)只不過是關鍵字中其中的一位(如字串、十進位整數等)。

   
多關鍵字中的每個關鍵字的取值範圍一般不同。如撲克牌的花色取值只有4種,而點數則有13種。單關鍵字中的每位一般取值範圍相同。



2、基數


      設單關鍵字的每個分量的取值範圍均是:
      C0≤kj≤Crd-1(0≤j<d)

可能的取值個數rd稱為基數。

     基數的選擇和關鍵字的分解因關鍵宇的類型而異:

(1) 若關鍵字是十進位整數,則按個、十等位進行分解,基數rd=10,C0=0,C9=9,d為最長整數的位元;

(2) 若關鍵字是小寫英文字串,則rd=26,Co='a',C25='z',d為字串的最大長度。


3、基數排序的基本思想


     基數排序的基本思想是:從低位到高位依次對Kj(j=d-1,d-2,…,0)進行箱排序。在d趟箱排序中,所需的箱子數就是基數rd,這就是"基數排序"名稱的由來。


4、基數排序的排序過程

     要排序的記錄關鍵字取值範圍是0到99之間的整數(36,5,16,98,95,47,
32,36,48)。對這些關鍵字進行基數排序的過程【參見動畫示範】。


5、基數排序的類型說明和演算法描述


     要保證基數排序是正確的,就必須保證除第一趟外各趟箱排序是穩定的。相應的類型說明及演算法描述【參見教材】。


6、演算法分析

   
 若排序檔案不是以數組R形式給出,而是以單鏈表形式給出(此時稱為鏈式的基數排序),則可通過修改出隊和人隊函數使表示箱子的鏈隊列無須分配結點空間,
而使用原鏈表的結點空間。人隊出隊操作亦無需移動記錄而僅需修改指標。雖然這樣一來節省了一定的時間和空間,但演算法要複雜得多,且時空複雜度就其數量級而
言並未得到改觀。 有關鏈式的基數排序可【閱讀參考書目[12]】。

     基數排序的時間是線性(即O(n))。

     基數排序所需的輔助儲存空間為O(n+rd)。

     基數排序是穩定的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.