O truque é que, de certa forma, a classificação é feita em várias etapas. Cada caractere tem três (ou às vezes mais) pesos atribuídos a ele. Digamos que para este exemplo os pesos sejam
space = [0000.0020.0002]
A = [1BC2.0020.0008]
Criando a chave de ordenação, os pesos diferentes de zero de um string são concatenados, um nível de peso por vez. Então
" A" = 1BC2 0020 0020 0002 0008
"A" = 1BC2 0020 0008
"A " = 1BC2 0020 0020 0008 0002
Se você classificar esses arrays, receberá o pedido:
1BC2 0020 0008 => "A"
1BC2 0020 0020 0002 0008 => " A"
1BC2 0020 0020 0008 0002 => "A "
Esta é uma simplificação do que realmente acontece; consulte o Algoritmo de agrupamento Unicode para obter mais detalhes. Os pesos de exemplo acima são, na verdade, da tabela padrão, com alguns detalhes omitidos.