基數排序

假設對0~10^6-1的1000個整數進行排序,使用基數排序r=10^6的排序方法至關於直接對數使用箱子排序。對箱子的初始化須要10^6個執行步,節點分配須要1000個執行步,收集箱子節點須要10^6個執行步,總的執行步數爲2001000。
使用基數r=1000的排序方法,其過程以下:
(1)採用每一個數的最低3位數字進行排序,令range=1000;
(2)對(1)的結果按倒數次3位(即倒數第4到第6位)數字進行排序。
上述每次排序都須要3000個執行步,所以總共須要6000步。若使用基數爲r=100的排序方法,則須要三次箱子排序,每次針對兩位數字。每次箱子排序須要1200個執行步,總的執行步數爲3600.若是使用基數爲r=10的排序方法,則要進行6次箱子排序,每次針對一位數字,總的執行步驟數爲6*(10+1000+10)=6120.對於本例,基數r=100的排序效率最高。
把數分解爲數字須要除法和取模操做。若是用基數10來分解,那麼從最低位到最高位的數字分解式爲:
x%10;
(x%100)/10;
(x%1000)/100;
……
若r=100,則相應的數字分解式爲:
x%100;
(x%10000)/100;
(x%1000000)/10000;
……
對於通常的基數r,相應的分解式爲:
x%r;
(x%r^2)/r;
(x%r^3)/r^2;
……
當使用基數r=n對0~n^c-1範圍內的n個整數進行分解時,每一個數能夠分解出c個數字。所以,對n個數,能夠用c次range=n個箱子排序。由於c是一個常量,因此整個排序時間爲O(cn)=O(n)。code

個人博客即將搬運同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=3qn9jdc6rge84排序

相關文章
相關標籤/搜索