Skip to content

Commit f8f774b

Browse files
committed
add radix sort
1 parent 9d05367 commit f8f774b

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

sorting-algorithms.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,46 @@ function combSort(arr) {
182182
return arr;
183183
}
184184

185-
// TEST CASES
185+
function radixSort(arr) {
186+
187+
function numDigits(n, base=10) {
188+
let i;
189+
for (i = 1; base**(i-1) < n; i++) {}
190+
return Math.max(Math.floor(i-1), 1);
191+
}
192+
193+
function getDigit(num, i) {
194+
return Math.floor(num / (10**(i-1))) % 10;
195+
}
196+
197+
let maxNumDigits = 0;
198+
for (let i = 0; i < arr.length; i++) {
199+
let nDigits = numDigits(arr[i]);
200+
if (nDigits > maxNumDigits) {
201+
maxNumDigits = nDigits;
202+
}
203+
}
204+
205+
for (let digitPos = 1; digitPos <= maxNumDigits; digitPos++) {
206+
let buckets = [[],[],[],[],[],[],[],[],[],[]];
207+
for (let i = 0; i < arr.length; i++) {
208+
let digit = getDigit(arr[i], digitPos);
209+
if (isNaN(digit)) {
210+
continue
211+
}
212+
buckets[digit].push(arr[i]);
213+
}
214+
for (let i = 0, k = 0; i < buckets.length; i++) {
215+
for (let j = 0; j < buckets[i].length; j++) {
216+
arr[k++] = buckets[i][j];
217+
}
218+
}
219+
}
186220

221+
return arr;
222+
}
223+
224+
// TEST CASES
187225

188226
function runTests() {
189227

@@ -208,6 +246,7 @@ function runTests() {
208246
bubbleSort,
209247
shellSort,
210248
combSort,
249+
radixSort,
211250
];
212251

213252
sortFunctions.forEach(function(sort) {

0 commit comments

Comments
 (0)