0
0
DSA Javascriptprogramming~20 mins

Radix Sort Algorithm in DSA Javascript - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Radix Sort Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Radix Sort on a small array
What is the output of the following JavaScript code that uses Radix Sort to sort an array of positive integers?
DSA Javascript
function radixSort(arr) {
  const maxNum = Math.max(...arr);
  let digit = 1;
  while (parseInt(maxNum / digit) > 0) {
    let buckets = Array.from({ length: 10 }, () => []);
    for (let num of arr) {
      let digitNum = parseInt((num / digit) % 10);
      buckets[digitNum].push(num);
    }
    arr = [].concat(...buckets);
    digit *= 10;
  }
  return arr;
}

const input = [170, 45, 75, 90, 802, 24, 2, 66];
console.log(radixSort(input));
A[24, 2, 45, 66, 75, 90, 170, 802]
B[802, 170, 90, 75, 66, 45, 24, 2]
C[2, 24, 45, 66, 75, 90, 170, 802]
D[2, 24, 45, 66, 75, 170, 90, 802]
Attempts:
2 left
💡 Hint
Think about how Radix Sort sorts numbers digit by digit from least significant to most significant.
🧠 Conceptual
intermediate
1:30remaining
Understanding Radix Sort Buckets
In Radix Sort, what is the purpose of using buckets during each digit iteration?
ATo reverse the array after sorting each digit.
BTo group numbers based on the current digit being processed, so they can be collected in order.
CTo store the final sorted array after all digits are processed.
DTo count how many times each digit appears in the array.
Attempts:
2 left
💡 Hint
Think about how numbers are grouped by digits before combining them back.
Predict Output
advanced
2:30remaining
Radix Sort with Negative Numbers
What will be the output of this modified Radix Sort code when sorting an array containing negative and positive integers?
DSA Javascript
function radixSortWithNegatives(arr) {
  const positives = arr.filter(x => x >= 0);
  const negatives = arr.filter(x => x < 0).map(x => Math.abs(x));

  function sort(nums) {
    const maxNum = Math.max(...nums);
    let digit = 1;
    while (parseInt(maxNum / digit) > 0) {
      let buckets = Array.from({ length: 10 }, () => []);
      for (let num of nums) {
        let digitNum = parseInt((num / digit) % 10);
        buckets[digitNum].push(num);
      }
      nums = [].concat(...buckets);
      digit *= 10;
    }
    return nums;
  }

  const sortedPositives = sort(positives);
  const sortedNegatives = sort(negatives).map(x => -x).reverse();

  return [...sortedNegatives, ...sortedPositives];
}

const input = [170, -45, 75, -90, 802, 24, -2, 66];
console.log(radixSortWithNegatives(input));
A[-90, -45, -2, 24, 66, 75, 170, 802]
B[-90, -45, -2, 802, 170, 75, 66, 24]
C[-2, -45, -90, 24, 66, 75, 170, 802]
D[24, 66, 75, 170, 802, -2, -45, -90]
Attempts:
2 left
💡 Hint
Negative numbers are sorted by absolute value then reversed and negated to keep correct order.
🔧 Debug
advanced
2:00remaining
Identify the bug in Radix Sort implementation
What error or issue will occur when running this Radix Sort code?
DSA Javascript
function radixSortBug(arr) {
  const maxNum = Math.max(...arr);
  let digit = 1;
  while (maxNum / digit > 0) {
    let buckets = Array.from({ length: 10 }, () => []);
    for (let num of arr) {
      let digitNum = Math.floor((num / digit) % 10);
      buckets[digitNum].push(num);
    }
    arr = [].concat(...buckets);
    digit *= 10;
  }
  return arr;
}

const input = [170, 45, 75, 90, 802, 24, 2, 66];
console.log(radixSortBug(input));
AInfinite loop because the while condition never becomes false.
BSyntaxError due to missing parentheses in Math.floor.
CTypeError because buckets is not an array.
DCorrect output: [2, 24, 45, 66, 75, 90, 170, 802]
Attempts:
2 left
💡 Hint
Check the while loop condition and how it changes each iteration.
🚀 Application
expert
3:00remaining
Radix Sort Stability and Output Order
Given the array of objects below, sorted by their 'value' property using Radix Sort, what will be the order of objects after sorting?
DSA Javascript
function radixSortObjects(arr) {
  const maxNum = Math.max(...arr.map(o => o.value));
  let digit = 1;
  while (Math.floor(maxNum / digit) > 0) {
    let buckets = Array.from({ length: 10 }, () => []);
    for (let obj of arr) {
      let digitNum = Math.floor((obj.value / digit) % 10);
      buckets[digitNum].push(obj);
    }
    arr = [].concat(...buckets);
    digit *= 10;
  }
  return arr;
}

const input = [
  {id: 'a', value: 21},
  {id: 'b', value: 12},
  {id: 'c', value: 21},
  {id: 'd', value: 10}
];

const sorted = radixSortObjects(input);
console.log(sorted.map(o => o.id));
A['d', 'a', 'c', 'b']
B['b', 'd', 'a', 'c']
C['a', 'c', 'b', 'd']
D['d', 'b', 'a', 'c']
Attempts:
2 left
💡 Hint
Radix Sort is stable, so objects with the same value keep their original relative order.