1. 程式人生 > >演算法排序之基數排序

演算法排序之基數排序

今天學習了一下基數排序,基數排序是屬於分配式排序的一種演算法。主要是有兩種演算法:

最高位優先(Most Significant Digit first)法,簡稱MSD法:先按k1排序分組,同一組中記錄,關鍵碼k1相等,再對各組按k2排序分成子組,之後,對後面的關鍵碼繼續這樣的排序分組,直到按最次位關鍵碼kd對各子組排序後。再將各組連線起來,便得到一個有序序列。

最低位優先(Least Significant Digit first)法,簡稱LSD法:先從kd開始排序,再對kd-1進行排序,依次重複,直到對k1排序後便得到一個有序序列。

第一步

以LSD為例,假設原來有一串數值如下所示:

42,51,64,78,34,69,14,16,25

首先根據個位數的數值,在走訪數值時將它們分配至編號0到9的桶子中:

  1. 5
  2. 4
  3. 0
  4. 6  3  1
  5. 2
  6. 1
  7. 0
  8. 7
  9. 6

第二步

接下來將這些桶子中的數值重新串接起來,成為以下的數列:

51,42,64,34,14,25,16,78,69

接著再進行一次分配,這次是根據十位數來分配:

0

  1. 4  6
  2. 5
  3. 4
  4. 2
  5. 1
  6. 4  9
  7. 8
  8. 0
  9. 0

第三步

接下來將這些桶子中的數值重新串接起來,成為以下的數列:

14,16,25,34,42,51,64,69,78