Причудливое слово, описывающее этот порядок: « лексикографический порядок » (и иногда «словарный порядок»). На обычном языке мы просто называем это «алфавитным порядком». Это означает, что мы сначала размещаем порядок в нашем алфавите (A
, B
, ... Z
и т. Д.), А затем, чтобы сравнить два слова в этом алфавите, мы сравниваем по одному символу за раз, пока найдите два неравных символа в одной и той же позиции и верните сравнение между этими двумя символами.
Пример: «естественный» порядок в алфавите { A, B, C, ..., Z }
таков: A < B < C < ... < Z
. Учитывая два слова s = s_1s_2...s_m
и t = t_1t_2...t_n
, мы сравниваем s_1
с t_1
. Если s_1 < t_1
, мы говорим, что s < t
. Если s_1 > t_1
, мы говорим, что s > t
. Если s_1 = t_1
, мы повторяем слова s_2...s_m
и t_2...t_n
. Чтобы это работало, мы говорим, что пустая строка меньше всех непустых строк.
В старые времена, до Unicode и т.п., упорядочивание наших символов было просто упорядочением кодов символов ASCII. Итак, у нас есть 0 < 1 < 2 < ... < 9 < ... < A < B < C < ... Z < ... < a < b < c < ... < z
. Во времена Юникода все сложнее, но применяется тот же принцип.
Теперь, что все это означает, что если мы хотим сравнить 1040
и 12000
, мы будем использовать следующее:
1040
сравнить с 12000
равно 040
сравнить с 2000
, что дает 040 < 2000
, потому что 0 < 2
, так что, наконец, 1040 < 12000
.
1040
сравнить с 10000
равно 040
сравнить с 0000
равно 40
сравнить с 000
, что дает 40 > 000
, поскольку 4 > 0
так что, наконец, 1040 > 10000
.
Ключевым моментом здесь является то, что это строки и они не имеют числового значения; они просто символы, и у нас есть определенный порядок на наших символах. То есть мы могли бы получить точно такой же ответ, если бы мы заменили 0
на A
, 1
на B
, ... и 9
на J
и сказали, что A < B < C < ... < J
. (В этом случае мы будем сравнивать BAEA
с BAAAA
и BAEA
с BCAAA
.)