天天看點

基數排序

  基數排序是非比較排序算法,算法的時間複雜度是o(n). 相比于快速排序的o(nlgn),從表面上看具有不小的優勢.但事實上可能有些出入,因為基數排序的n可能具有比較大的系數k.是以在具體的應用中,應首先對這個排序函數的效率進行評估。

  基數排序不僅僅隻用在數字的排序上,由于關鍵字的不同,可以選擇不同的排序方式。要想采用基數排序,我們需要至少兩種關鍵字,而且要依照關鍵字的優先級從低到高的順序進行操作。

  在數字問題上,要得到一個數列排序: 42 58 5 32,這樣的數字,我們可以通過個位與十位來進行排序,分為兩個桶子,分别為0~9的個位和0~9的十位。 具體的排序過程(紅色字型表示正在排序的數位)如下:    

     第一次排序(個位):

  桶的編号:0     1       2       3       4      5      6      7      8      9

  個數:     0     0        2      0       0       1      0      0      1      0

  收集桶:42 32 5 58

第二次排序(十位):

  個數:     1     0        0      1       1       0     0      0      0      0

  收集桶:5 32 42 58

  還可以用在其他問題上,例如,我們要把52張四種花色的撲克牌進行依次從小到大的排序,其中黑桃<紅桃<方片<梅花。

  這個問題的話,關鍵字為0~k和花色,而且花色的優先級大于數字,是以我們要先選擇數字0~k先做一次排序,也就是分13個桶,分為标記為0~k,這樣每個桶内就存在不同的四張花色的牌,這樣我們收集起來了,然後我們再分4個桶,标記為不同的花色,然後把13個标記為數字的桶中的撲克牌依次放進這些桶内,最終我們可以不通過比較數字的大小和花色,就可以得到排序的結果了。

基數排序
基數排序

  

基數排序