The radix sort given in the text is indeed stable. The use of queues to determine the placement of the array elements insures that duplicate elements will be ordered relative to their original array positions. The following example illustrates the stablity of the algorithm. The duplicate elements are labeled 'a' and 'b' to distinguish between positions.
ORIGINAL ARRAY: R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 10 179 208a 306 93a 859 93b 208b 9a 271 9b
Queues For Pass One:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
| | | | | | | | |
| | | | | | | | | 9b
| | | | | | | | | 9a
| | 93b | | | | | | 208b | 859
| 271 | 93a | | | | 306 | | 208a | 179
CHAIN AFTER PASS ONE: R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 10 271 93a 93b 306 208a 208b 179 859 9a 9b
Queues: Created by Pass 2 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 9b → → → → → → → → → 9a → → → → → → → → → 208b → → → → → → → → → 208a → → → → → → → 179 → → 93b
CHAIN AFTER PASS TWO: R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 10 306 208a 208b 9a 9b 259 271 279 93a 93b
QUEUES FOR PASS THREE:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
| | | | | | | | |
93b | | | | | | | | |
93a | | 259 | | | | | | |
9b | | 208b | | | | | | |
9a | 179 | 208a | 306 | | | | | 859 |
CHAIN AFTER PASS THREE: R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 10 9a 9b 93a 93b 179 208a 208b 259 306 859