/dev/random писал: ↑04.12.2019 18:27
К сожалению, это не тот смысл, который в него вкладываете вы.
и все добрые люди.
Код: Выделить всё
//foo.c
# include <stdio.h>
int main ()
{
if (strcmp("#4", "+") < 0)
printf ("#4 < +\n");
return 0;
}
Ниже как должен работать лексикографический порядок и как работает не пойми что.
Shell
user@astra:~$
user@astra:~$ gcc -o foo foo.c
user@astra:~$ ./foo
#4 < +
user@astra:~$ echo \#4 > bar
user@astra:~$ echo + >> bar
user@astra:~$ sort bar
+
#4
user@astra:~$
Раз уж разговор пошёл о терминах, то не поленюсь. Итак, сравниваем две строки посимвольно, пока не найдём разных символов. А тогда смотрим на код этих символов и та строка, код символа которой меньше и считается меньшей. Так, а если какая-нибудь строка закончится, а разных символов не будет найдено, то она считается меньше. Если две строки заканчиваются одновременно, то они равны. Я что-то сам придумал? Нет, взял из справочника по Си.
Тут, конечно, можно ещё оттачивать некоторые определения, но не заменить их на противоположные.
Другую сортировку, отличную от этой (ещё раз, взятой в справочнике по Си.) если и называть ТОЖЕ лексикографическим порядком, только другим, так это всё равно, что сказать: груша это тоже яблоко, только другое.
И да, все символы, с которыми до сих пор велась работа, соответствуют одним и тем же числам. Что в юникоде, что не в юникоде. Что в локали, что ещё где.
Вывод:
sort по умолчанию что угодно, но не лексикографический порядок. Я бы с удовольствием послушал, как она сортирует по умолчанию. Если для этого придётся читать что-нибудь... Ну такое, что до весны мне с моим английским хватит, то очень грустно.
Я просто читаю маны.