Radix Sort
LSD Sort
MSD Sort
Sorting Algorithms
Computer Science

Radix sort LSD versus MSD versions

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

Introduction to Radix Sort

Radix sort is a non-comparative integer sorting algorithm that sorts data by processing individual digits. It is especially efficient for sorting large datasets or when sorting integers or fixed-width strings. The term "radix" refers to the base of a number system, which can vary, allowing radix sort to handle a variety of numeric systems. Radix sort comes in two main variants: Least Significant Digit (LSD) and Most Significant Digit (MSD), which determine the order in which digits are processed.

How Radix Sort Works

Radix sort processes digits of a number from a specified direction, either least significant or most significant. The algorithm relies on stable sorting, where the relative order of equal elements is preserved, typically using counting sort or bucket sort. Let's explore each version of radix sort in detail.

Least Significant Digit (LSD) Radix Sort

Process

  1. Digit Processing Order: In LSD radix sort, sorting begins with the least significant digit, moving to the most significant digit.
  2. Iteration: For k-digit numbers, the algorithm performs k passes. Each pass involves stable sorting by the current digit.
  3. Stability: Stability is crucial since numbers are partially sorted based on previous digits.

Example: Sorting Decimal Numbers

Consider an example of sorting the following list of 3-digit numbers: `[231, 112, 342, 224, 111]`.

  • Pass 1 (units digit): Sort `[231, 112, 342, 224, 111]` to get `[231, 342, 112, 224, 111]`.
  • Pass 2 (tens digit): Sort `[231, 342, 112, 224, 111]` to get `[111, 112, 224, 231, 342]`.
  • Pass 3 (hundreds digit): No change needed, the list is already sorted as `[111, 112, 224, 231, 342]`.

Characteristics

  • Time Complexity: O(n×k)O(n \times k), where nn is the number of elements, and kk is the number of passes (or digits).
  • Space Complexity: Requires additional space for the stable sorting algorithm employed.
  • Best Scenario: Suitable for uniformly distributed data with a limited range of digits.

Most Significant Digit (MSD) Radix Sort

Process

  1. Digit Processing Order: In MSD radix sort, sorting begins with the most significant digit.
  2. Recursive Division: Values are grouped according to the current digit and recursively sorted on subsequent digits.
  3. Subarray Sorting: Each group or bucket is sorted separately, allowing parallelization.

Example: Sorting Decimal Numbers

Using the previous example `[231, 112, 342, 224, 111]`:

  • Pass 1 (hundreds digit):
    • Create buckets: `1` -> `[111, 112]`; `2` -> `[231, 224]`; `3` -> `[342]`.
  • Pass 2 (tens digit recurs):
    • `1` bucket sorted to `[111, 112]`.
    • `2` bucket sorted to `[224, 231]`.
  • Pass 3 (units digit recurs): Combine buckets `[111, 112, 224, 231, 342]`.

Characteristics

  • Time Complexity: Also O(n×k)O(n \times k) on average but can degrade depending on data.
  • Space Complexity: Similar to LSD, it requires additional space for recursive sorting.
  • Best Scenario: More efficient for variable-length strings and less uniformly distributed data.

Comparing LSD and MSD Radix Sort

Both LSD and MSD radix sorts are effective in different contexts. The choice between them typically depends on the nature of the data and specific application requirements.

AspectLSD Radix SortMSD Radix Sort
Use CaseBest for uniformly distributed numbers and fixed-width stringsIdeal for variable-length strings and non-uniform distributions
Digit ProcessingStarts from least significantStarts from most significant
RecursiveNot requiredRequires recursive sorting
Complexity InfluenceNumber of digits, kkData distribution and digits
MemoryRequires additional memory for stable sortingRequires memory for recursive sorting and bucket creation
EfficiencyEfficient for long same-length dataEfficient for varied data lengths

Conclusion

Radix sort is a powerful sorting method for specific scenarios, particularly when dealing with long lists of numbers or strings that fit its stable sorting requirements. Understanding the conditions under which LSD or MSD should be applied can lead to highly efficient implementations that outperform traditional comparison-based sorting algorithms. When harnessed effectively, radix sort leverages its lower time complexity and can serve as a compelling tool for developers and engineers tackling large-scale sorting problems.


Course illustration
Course illustration

All Rights Reserved.