radix sorting

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>

相關文章
相關標籤/搜索