If I just need to sort strings composed by ASCII characters, wondering what are the differences between using most significant v.s. least significant radix sorting? I think
The part that's confusing you is that pretty much ALL LSD radix sorts preserve the order of duplicate keys. That's because they rely on this property to work at all. For example, if you have 2 iterations like this, sorting by first the ones place and then the tens place:
22 21 11
21 -> 11 -> 21
11 22 22
When we sort by tens we need to preserve the tie-breaking order we got when we sorted by ones, so that 21 and 22 come out in the proper order even though they have the same digits in the 10s place. If you implement the first sort (by ones) the same way you have to do all the other ones (and why wouldn't you?), then the sort is stable.
An MSD radix sort can be written using the same kinds of sorting steps as an LSD radix sort, in which case it will be stable, too. But there are other, often more efficient ways to implement an MSD radix sort that don't have this property.
MSD-first radix sorts that don't preserve the order or duplicates are usually in-place, i.e., they work without allocating a separate array to hold the sorted elements.
NOTE that none of this makes any difference if you're just sorting a list of strings by comparing their ASCII code points. "preserving the order of duplicate keys" only matters when they have extra information attached to them. For example if the keys have associated values, or if you are sorting in a case-independent manner and you want "Abe" and "abE" out in the same order they came in.