Я заметил, что многие методы числовой сортировки, кажется, сортируют по 1, 10, 2, 3 ... вместо ожидаемых 1, 2, 3, 10 ... У меня возникают проблемы при разработке сценария, в котором я бы Мне нужен первый метод, и, как пользователь, я расстраиваюсь, когда вижу его на практике. Существуют ли законные варианты использования для первого стиля над вторым? Если так, то кто они? Если нет, то как появился первый стиль сортировки? Каковы официальные названия для каждого метода сортировки?
31
Ответы:
это лексикографическая сортировка, которая означает, что в основном язык обрабатывает переменные как строки и сравнивает символ за символом (
"200"
больше, чем"19999"
потому, что'2'
больше, чем'1'
)исправить это вы можете
убедитесь, что значения рассматриваются как целые числа,
Приступайте
'0'
к строкам, чтобы все они имели одинаковую длину (жизнеспособно, только если вы знаете максимальное значение).Вот почему вы увидите нумерацию эпизодов в медиа-файлах (S1E01) с добавленным 0, чтобы лексикографическая сортировка не мешала и позволяла программам просто воспроизводить / отображать в алфавитном порядке,
или создайте пользовательский компаратор, который сначала сравнивает длину строк (более короткие строки - меньшие целые числа) и, когда они равны, сравнивает лексикографически (осторожно с ведением
'0'
)источник
В алфавитном порядке 1 предшествует 2. Всякий раз, когда вы видите первый метод, это не потому, что это желательно, а потому, что сортировка строго алфавитна (и происходит слева направо, по одному символу за раз): 1, 2, 10 имеет смысл для вас, но не для компьютера, который знает только буквенное сравнение. В таком простом сравнении нет способа узнать, что единица, за которой следует 0, на самом деле идет после двух.
Когда вы видите смешанную сортировку слов и чисел, которая правильно обрабатывает числа, это происходит потому, что сортировка более интеллектуальна, и, кроме того, обычно работает только в начале или конце строки.
источник
Это результат, когда вы сортируете строки чисел по алфавиту, а не по номерам.
Этот стиль сортировки является поведением по умолчанию для команды unix,
sort
например, если вы не используете параметр--numeric-sort
командной строки, который говорит ему пытаться интерпретировать числовые значения.источник
У других есть ответы, что это за вид, но никто не ответил на ваш вопрос о том, почему вы это видите. Ответ не так уж и интересен. Обычно это ошибка. В большинстве методов сортировки по умолчанию используется один или другой, и программирование, вероятно, не заботится об изменении значения по умолчанию при сортировке чисел.
источник