演算法排序之基數排序
阿新 • • 發佈:2018-12-11
今天學習了一下基數排序,基數排序是屬於分配式排序的一種演算法。主要是有兩種演算法:
最高位優先(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的桶子中:
0
- 5
- 4
- 0
- 6 3 1
- 2
- 1
- 0
- 7
- 6
第二步
接下來將這些桶子中的數值重新串接起來,成為以下的數列:
51,42,64,34,14,25,16,78,69
接著再進行一次分配,這次是根據十位數來分配:
0
- 4 6
- 5
- 4
- 2
- 1
- 4 9
- 8
- 0
- 0
第三步
接下來將這些桶子中的數值重新串接起來,成為以下的數列:
14,16,25,34,42,51,64,69,78