Skip to content

Commit c2b1bb9

Browse files
committed
docs: updated readme
1 parent 3b3aacd commit c2b1bb9

File tree

1 file changed

+32
-16
lines changed
  • src/main/java/algorithms/sorting/radixSort

1 file changed

+32
-16
lines changed
Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,46 @@
11
# Radix Sort
22

33
Radix Sort is a non-comparison based, stable sorting algorithm.
4-
We first treat each element as a string with *w* digits (Padding elements that have
5-
less than *w* digits).
64

7-
From the least-significant digit to the most-significant digit, we constantly
8-
split them into ten queues corresponding to the number range *[0, 9]*. We then move
9-
through the queue and concatenate the elements back into a list at the next iteration.
5+
Radix Sort continuously sorts based on the least-significant segment of a element
6+
to the most-significant value of a element.
107

11-
This takes advantage of the concept of place value.
12-
(The value of a digit in a number relative to its position within the number)
8+
The definition of a 'segment' is user defined and defers from implementation to implementation.
9+
Within our implementation, we define each segment as a bit chunk.
10+
11+
For example, if we aim to sort integers, we can sort each element
12+
from the least to most significant digit, with the digits being our 'segments'.
13+
14+
While Radix Sort is non-comparison based,
15+
the that total ordering of elements is still required.
16+
This is maintained in how the states are stored after sorting is conducted with respect to each digit.
17+
18+
This total ordering is needed because once we assigned a element to a order based on a segment,
19+
the order *cannot* change unless deemed by a segment with a higher significance.
20+
Hence a stable sort is required to maintain the order as
21+
the sorting is done with respect to each of the segments.
22+
23+
Within our implementation, we take the binary representation of the elements and
24+
partition it into 8-bit segments, a integer is represented in 32 bits,
25+
this gives us 4 total segments to sort through.
26+
27+
Note that the binary representation is weighted positional,
28+
where each bit's value is dependent on its overall position
29+
within the representation (the n-th bit from the right represents *2^n*),
30+
hence we can actually increase / decrease the number segments we wish to conduct a split from.
1331

1432
![Radix Sort](https://miro.medium.com/v2/resize:fit:661/1*xFnpQ4UNK0TvyxiL8r1svg.png)
1533

34+
We place each element into a queue based on the number of possible segments that could be generated.
35+
Suppose the values of our segments are in base-10, (limited to a value within range *[0, 9]*),
36+
we get 10 queues.
37+
1638
*Source: Level Up Coding*
1739

1840
## Complexity Analysis
1941
**Time**:
20-
Let *k* be the base of the number system being used. For integers in java, it is base 10
21-
(we have digits 0 to 9), in the case of base 2 (binary), we only have 2 digits (1, 0),
22-
base 3, (0, 1, 2). Hence, we can see that the base of the number system determines the number of
23-
different queues we need to iterate through to rebuild our original array, additionally, we also
24-
need to iterate through all *w* positions (digits), this results in the following complexities:
42+
Let *w* be the number of segments we sort through, *n* be the number of elements
43+
and *k* be the number of queues.
2544

2645
- Worst case: O(w * (n + k))
2746
- Average case: O(w * (n + k))
@@ -39,7 +58,4 @@ Radix Sort process.
3958

4059
### Common Misconception
4160
- While not immediately obvious, we can see that radix sort is a stable sorting algorithm as
42-
they are enqueued in a manner where the first observed element remains at the head of the queue.
43-
- While it is non-comparison based, not that total ordering of elements is still required -
44-
except now this property is forced upon the algorithm in the manner of how the queues
45-
are structured.
61+
they are enqueued in a manner where the first observed element remains at the head of the queue.

0 commit comments

Comments
 (0)