使用quicksort对长度为n(= 10 ^ 6)的1到10 ^ 9的整数数组进行排序将给我们O(n * log2 n)时间。但是,如果我们应用以n为基数的基数排序,则只需对其进行4次传递。
我的理解基数排序复杂度为O((n + b)* logb(k)),其中k是最大值,可以写成n ^ c。O((n + b)* logb(n ^ c))以b等于n,O((n + n)* c)= O(2c * n)
且quicksort为(n * log2 n)基数排序为(2c * n)
max k(列表中的整数)为10 ^ 9也n ^ c = k因此c = 2。
并且对于n = 10 ^ 6,log2 n等于20。
排序快速排序采用20n步,而基数排序采用4n步。
在这种情况下,quicksort表现良好吗?建议使用基数排序。
使用给定的参数,基数排序将花费2遍。相比之下,以256为基数的基数排序将需要4次通过才能对32位整数进行排序(如果为无符号,则范围为0到2 ^ 32-1)。在理想情况下,Quicksort为O(n log2(n)),它更像O(n log1.4(n))(大部分时间分配30%/ 70%)。