What:
基数排序是基于箱子排序,把数按照某种基数分解成数字,然后对数字进行排序,如将375按基数10分解为3、7、5,然后先按个位数进行排序,再按十位数、百位数。
Why:
针对箱子排序算法的Θ(n+range),如果要在0-n^4里面对10个数进行排序,则n=10,range=n^4,那么箱子排序的时间性能便为Θ(n^4)。如果对这10个数进行基数排序,设定基数x,则基数排序的执行步数也就是2*x+10,时间性能远远高于箱子排序。
How:
216-》521-》425-》116-》091-》515-》124-》034-》096-》024(输入链表) |
521-》091-》124-》034-》024-》425-》515-》216-》116-》096(按个位数排序) |
515-》216-》116-》521-》124-》024-》425-》034-》091-》096(再按十位数排序) |
024-》034-》091-》096-》116-》124-》216-》425-》515-》521(再再按百位数排序) |
(1)输入链表;
(2)选定基数r,进行分解,分解公式为:x%r ; (x/r)%r ; (x/r^2)%r ; (x/r^3)%r .......,这里选基数r=10;
(3)先用x%r分解出的数进行箱子排序;
(4)在(3)的基础上再用 (x/r)%r分解出的数进行箱子排序;
(5)在(4)的基础上用 (x/r^2)%r分解出的数进行箱子排序;
时间性能分析:
当使用基数r=n对0-n^c-1里面的n个数进行排序,每个数可以分解出c个数字,所以一共需要c次箱子排序;每次箱子排序range=n,即Θ(n) ;所以整个排序时间性能为Θ(n);