我想出了以下内容,但可预见的是它不起作用。
var t = new Array(a.length);
var r = 4;
var b = 64;
var count = new Array(1<<r);
var pref = new Array(1<<r);
var groups = Math.ceil(b / r);
var mask = (1 << r) - 1;
var shift = 0;
for(var c = 0; c < groups; c++)
{
shift += r;
for(var j = 0; j < count.length; j++)
{
count[j] = 0;
}
for(var i = 0; i < a.length; i++)
{
count[ (a[i] >> shift) & mask ]++;
}
pref[0] = 0;
for(var i = 0; i < count.length; i++)
{
pref[i] = pref[i-1] + count[i-1];
}
for(var i = 0; i < a.length; i++)
{
t[ pref[ (a[i] >> shift) & mask ]++ ] = a[i];
}
for(var i = 0; i < a.length; i++)
{
a[i] = t[i];
}
// a is sorted?
}
a
保存整数输入数组?为什么不将count
、pref
和groups
清零?在JS中,即使通过new Array(length)
创建数组,它们的内容也是未定义的,而undefined + 0
等于NaN
。 - Mike Samuelcount
已经被清零,pref
在使用之前已经初始化,而groups
不是一个数组。 - Josh K