排序演算法——基數排序簡介
阿新 • • 發佈:2020-12-19
基數排序
基數排序也是一種穩定排序演算法,且一般計數排序被用在基數排序過程中。
基數排序包括 LSD(Least significant digital) 和 MSD(Least significant digital) 兩大類。
LSD 基數排序的思想非常直觀:假設一個數組的最高位有 d d d 位,那麼依次從低位向高位處理,先排好個位,然後在排好個位的基礎上排十位,以此類推,直到遍歷完最高位次,排序結束。每一次都使用一種穩定排序演算法對該陣列進行排序。
上圖表示一個由 7 個 3 位陣列成的列表的基數排序。最左邊的一列是輸入資料,其餘各列顯示了由低到高位連續進行排序後列表的情況。陰影指出了進行排序的位。
引理:給定 n n n 個最高位為 d d d 的數,其中每一個數位有 k k k 個可能的取值。如果基數排序使用的穩定排序方法耗時 O ( n + k ) O(n + k) O(n+k),那麼它就可以在 O ( d ( n + k ) ) O(d(n+k)) O(d(n+k)) 時間內將這些數排序。
在下面的程式碼中,我們假設 n n n 個 d d d 位的元素存放在陣列 A A A 中,其中第一位是最低位,第 d d d 位是最高位。
Radix-Sort(A, d) { for i=1 to d use a stable sort to sort array A on digit i }