radix sorting基於bucket sorting,先按照個位數排序,再按照十位數排序,再百位。。。spa
代碼參考自
排序
http://en.wikipedia.org/wiki/Radix_sortip
<script>it
function printArr(arr)io
{ console
console.log(arr);function
}sort
function radixSort(arr)di
{while
var retval = [];
var maxNum = function(){
var tmp = 0;
var len = arr.length;
var i = 0;
while(i <= len)
{
if(tmp < arr[i])
{
tmp = arr[i]
}
++i;
}
return tmp;
}();
var base = 10;
var len = arr.length;
var buckets = [0, 0, 0, 0, 0, 0, 0, 0, 0];
arr.forEach(function(e){
retval.push(e);
});
var exp = 1;
while(maxNum/exp > 0)
{
for(var i = 0; i < len; i++)
{
buckets[Math.floor(arr[i] / exp) % base]++;
}
for(i = 1; i < base; i++)
{
buckets[i] += buckets[i - 1];
}
for(i = len - 1; i >= 0; i--)
{
retval[--buckets[Math.floor(arr[i] / exp) % base]] = arr[i];
}
arr.length = 0;
retval.forEach(function(e){
arr.push(e);
});
exp *= base;
for(i = 0; i < base; i++)
{
buckets[i] = 0;
}
//printArr(retval);
}
return retval;
}
var datas = [100, 31, 52, 208, 191, 321, 88, 910, 301, 2, 55, 101, 233, 512];
printArr(datas);
var output = radixSort(datas);
printArr(output);
</script>