Zauważyłem, że wiele metod sortowania numerycznego wydaje się sortować według 1, 10, 2, 3 ... zamiast oczekiwanych 1, 2, 3, 10 ... Mam problem z wymyśleniem scenariusza, w którym potrzebuję pierwszej metody, a jako użytkownik czuję się sfrustrowany za każdym razem, gdy widzę ją w praktyce. Czy istnieją uzasadnione przypadki użycia pierwszego stylu w stosunku do drugiego? Jeśli tak, jakie one są? Jeśli nie, to w jaki sposób powstał pierwszy styl sortowania? Jakie są oficjalne nazwy dla każdej metody sortowania?
30
Odpowiedzi:
to jest sortowanie leksykograficzne, co oznacza, że język traktuje zmienne jak ciągi znaków i porównuje znak po znaku (
"200"
jest większy niż"19999"
ponieważ'2'
jest większy niż'1'
)aby to naprawić, możesz
upewnij się, że wartości są traktowane jako liczby całkowite,
dodawaj
'0'
do ciągów, aby wszystkie miały równe długości (wykonalne tylko, gdy znasz maksymalną wartość).Dlatego na plikach multimedialnych (S1E01) zobaczysz numerację odcinków z poprzedzonym 0, więc sortowanie leksykograficzne nie psuje rzeczy i pozwala programom po prostu odtwarzać / wyświetlać w kolejności alfabetycznej,
lub utwórz niestandardowy komparator, który najpierw porównuje długość ciągów (krótsze ciągi są mniejszymi liczbami całkowitymi), a gdy są one równe, porównuje leksykograficznie (ostrożnie przed wprowadzaniem
'0'
)źródło
Alfabetycznie, 1 występuje przed 2. Kiedykolwiek zobaczysz pierwszą metodę, to nie dlatego, że jest pożądana, ale dlatego, że sortowanie jest ściśle alfabetyczne (i dzieje się od lewej do prawej, jeden znak na raz): 1, 2, 10 ma sens do ciebie, ale nie do komputera, który zna tylko porównanie alfabetyczne. W takim prostym porównaniu nie ma sposobu, aby wiedzieć, że jeden po 0 faktycznie pojawia się po dwóch.
Kiedy widzisz mieszane sortowanie słów i liczb, które prawidłowo traktuje liczby, dzieje się tak dlatego, że sortowanie jest bardziej inteligentne, a ponadto zwykle działa tylko na początku lub na końcu łańcucha.
źródło
Taki jest wynik, gdy sortujesz ciągi liczb alfabetycznie zamiast numerycznie.
Ten styl sortowania jest domyślnym zachowaniem
sort
na przykład polecenia unix , chyba że użyjesz--numeric-sort
opcji wiersza poleceń, która każe mu interpretować wartości liczbowe.źródło
Inni znają tego rodzaju odpowiedzi, ale nikt tak naprawdę nie odpowiedział na pytanie, dlaczego je widzisz. Odpowiedź nie jest tak ekscytująca. Zwykle jest to błąd. Większość metod sortowania będzie domyślnie ustawiona na jedną lub drugą, a programowanie prawdopodobnie nieostrożnie zmieni domyślną wartość podczas sortowania liczb.
źródło