/**
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
您总是可以得到最大值和最小值作为一个效率启发式在线性时间以及。
另外,中间数组至少需要 n 个额外的空间,而且它显然是稳定的。
/**
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
我还要解释的是,对于 n 个字长 w 的整数,基数排序的复杂度是 O (wn)。有时 w 表示为常量,这会使基数排序(对于足够大 n)比最好的基于比较的排序算法更好,后者都执行 O (n log n)比较来对 n 个键进行排序。然而,一般情况下 w 不能被认为是一个常量: 如果所有的 n 个键都是不同的,那么 w 必须至少是 log n,随机存取机器才能将它们存储在内存中,这最多只能给出一个时间复杂度 o (n log n)。(来自维基百科)