Radix sort implementation.

master
ben-burlingham 10 years ago
parent 785c61e3a9
commit d01bdb503d
  1. 5
      index.html
  2. 1
      js/bubblesort.js
  3. 64
      js/radixsort.js

@ -105,6 +105,7 @@
<script type='text/javascript' src='js/shellsort.js'></script>
<script type='text/javascript' src='js/selectionsort.js'></script>
<script type='text/javascript' src='js/bubblesort.js'></script>
<script type='text/javascript' src='js/radixsort.js'></script>
<script type='text/javascript'>
var dump = function(arr) {
@ -116,7 +117,7 @@
return d.join(',');
}
var SS = new Bubblesort();
var SS = new RadixSort();
var data = SS.generate(15);
console.log('DATA: ' + dump(data));
@ -125,7 +126,7 @@
console.log('SHUFFLED: ' + dump(shuffled));
var ordered = Object.create(shuffled);
SS.sort(ordered, 0, ordered.length - 1);
ordered = SS.sort(ordered, 0, ordered.length - 1);
console.log('ORDERED: ' + dump(ordered));

@ -15,6 +15,7 @@ Bubblesort.prototype.sort = function(arr) {
var swapped = false;
var len = arr.length;
// NOTE this starts at the beginning of the array each time
for (i = 1; i < len; i++) {
if (arr[i - 1].value > arr[i].value) {
this.swap(arr, i, i - 1);

@ -0,0 +1,64 @@
/**
*
*/
var RadixSort = function() {
this.instructions = [];
};
RadixSort.prototype = Object.create(Sorter.prototype);
/**
*
*/
RadixSort.prototype.sort = function(arr) {
var max = 0;
var len = arr.length;
var tmp = arr;
// Find max
for (var i = 0; i < len; i++) {
if (max < arr[i].value) {
max = arr[i].value;
}
}
// Run through digit sort for as many digits as in max
var digits = max.toString().length;
for (var i = 1; i <= digits; i++) {
tmp = this.sortByDigit(tmp, i);
}
return tmp;
};
/**
*
*/
RadixSort.prototype.sortByDigit = function(arr, digit) {
var len = arr.length;
var val = null;
var buckets = [];
var result = [];
// Sort into buckets
for (var i = 0; i < len; i++) {
// Remove more significant digits, then round down all less significant digits.
val = arr[i].value % Math.pow(10, digit);
val = Math.floor((val / Math.pow(10, digit - 1)));
if (buckets[val] === undefined) {
buckets[val] = [];
}
buckets[val].push(arr[i]);
}
// Concat sorted buckets
for (var j = 0; j < 10; j++) {
if (buckets[j] !== undefined) {
result = result.concat(buckets[j]);
}
}
return result;
};
Loading…
Cancel
Save