It’s actually sorting logically, but the logic may not be clear based on those two items alone. I added those to a table along with some other items, and I think the pattern might be more clear after seeing this:

Long story short, it’s sorting by number first, then by the characters after the number (if any are present). It’s not sorting character by character.
A simple way to force the sort to go character by character is to put spaces between each character. These are the same items with the same sort settings:

Thankfully you don’t need to apply this change manually. This formula will create the desired output, and you can then sort by the formula field (which can be hidden).
REGEX_REPLACE({Your Field Here}, "(.)", "$1 ")
Here’s the original data in the left column, and the formula output in the right, with the sort applied to the formula field.
