왜 일부 정렬 방법이 1, 10, 2, 3…


30

많은 숫자 정렬 방법이 예상되는 1, 2, 3, 10이 아닌 1, 10, 2, 3으로 정렬되는 것보다 눈치 ...습니다. 첫 번째 방법이 필요하며 사용자는 실제로 볼 때마다 좌절합니다. 두 번째 스타일보다 첫 번째 스타일에 대한 합법적 인 사용 사례가 있습니까? 그렇다면 무엇입니까? 그렇지 않다면, 첫 번째 정렬 스타일은 어떻게 생겨 났습니까? 각 정렬 방법의 공식 이름은 무엇입니까?


귀하의 질문에 대한 답변은 아니지만 숫자를 포함 할 수있는 문자열 목록을 정렬 해야하는 경우 Alphanum 알고리즘을 사용하는 것이 좋습니다. davekoelle.com/alphanum.html
TehShrike

매우 간단합니다. 정렬 할 때 알고리즘은 왼쪽에서 오른쪽으로 스캔합니다. 따라서 1과 5에 관해서는 5가 더 큽니다. 그리고 1이 실제로 134234와 같은 더 큰 숫자의 일부이면이 EVEN과 함께 벙어리가갑니다. 134234가 5보다 크다는 것을 알기 위해서는 실제로 스캔해야합니다 숫자를 마지막 자릿수 (실제 첫 자릿수) 4 지나서 뒤로 이동하여 그 숫자가 실제로 5보다 훨씬 큰 100000임을 확인하십시오. 따라서 일반적인 블라인드 정렬은 문자를 비교하기 때문에이 작업을 수행하지 않습니다 비교에서 또는 이후에 발생하는 것을 무시하는 문자.
AbstractDissonance

1
en.wikipedia.org/wiki/Natural_sort_order 를 읽으면 의미가 있습니다. 자연스럽게, 자릿수 문자열은 단일 "문자"로 그룹화됩니다. 물리적으로, 논리적으로는 아니기 때문에 우리는 여전히 첫 번째 경우와 같은 문자 비교를 할 수 있지만 정수 문자열을 문자가 아닌 정수 문자열과 비교하여 전체 값을 비교할 수 있습니다. 이것은 인간이 물건을 읽는 방식이기 때문에 모든 종류가 이런 식이어야합니다 (숫자의 경우 왼쪽에서 오른쪽으로도 오른쪽에서 왼쪽으로 읽습니다. 1234 = 1000 + 200 + 30 + 4, 4000 + 300 + 20 + 1
AbstractDissonance

답변:


62

사전 편찬 문자열로 기본적 언어 취급 변수를 의미하며, 문자 단위로 비교하여 정렬 ( "200"보다 큰 "19999"때문에 '2'보다 크다 '1')

이 문제를 해결하기 위해

  • 값이 정수로 취급되는지 확인하십시오.

  • '0'문자열 앞에 추가 하여 모두 동일한 길이를 갖습니다 (최대 값을 알고있는 경우에만 실행 가능).
    그렇기 때문에 사전에 0이 붙은 미디어 파일 (S1E01)에 에피소드 번호가 표시되어 사전 사전 정렬이 문제를 일으키지 않고 프로그램을 알파벳 순서로 재생 / 표시 할 수 있습니다.

  • 또는 문자열의 길이를 먼저 비교하고 (짧은 문자열은 정수가 작은) 사용자 정의 비교기를 만들어 사전이 동일한 경우 사전 식으로 비교하십시오 (leading에 대해주의하십시오 '0')


5
'인쇄 적'인 경우 +1 그 용어를 들어 본 적이 없다면 알파벳 정렬로 생각했을 것입니다. 숫자는 문자열 유형으로 취급됩니다.
Anonymous

3
문자열 앞에 '0'을 붙이면 +1입니다. 나는 이것을 프로그래밍하지 않았고, 그것은 내 폴더의 이름에 있었고 'Chapter 10'은 'Chapter 2'이전에 왔습니다. 그런 다음 01-09라는 1-9 장을 만들었으며 이제 "정확하게"정렬되었습니다.
마빈

6

알파벳순으로 1이 2보다 먼저 나옵니다. 첫 번째 방법을 볼 때마다 바람직하지는 않지만 정렬이 알파벳순으로되어 있기 때문에 (한 번에 한 문자 씩 왼쪽에서 오른쪽으로 발생) 1, 2, 10 이 의미가 있습니다. 알파벳 비교 만 알고있는 컴퓨터에는 해당되지 않습니다. 하나는 것을 알고 단순 비교의 종류에 방법은 없습니다 다음에 0이 실제로 제공 한 후 두가.

숫자를 올바르게 취급하는 혼합 된 단어 및 숫자 정렬을 보면 정렬이보다 지능적이며, 그 외에도 여전히 문자열의 시작 또는 끝에서만 작동하기 때문입니다.


4

숫자 대신 문자열을 숫자 순으로 정렬하면 결과가 나타납니다.

명령 행 옵션 sort을 사용 --numeric-sort하여 숫자 값을 해석하도록 지시 하지 않는 한, 해당 정렬 스타일은 예를 들어 unix 명령 의 기본 동작입니다 .


4

다른 사람들은 이런 종류의 질문에 대한 답변을 가지고 있지만, 왜 당신이 그것을 보는지에 대한 질문에 답한 사람은 없습니다. 그 답은 그리 흥미롭지 않습니다. 일반적으로 버그입니다. 대부분의 정렬 방법은 기본적으로 하나 또는 다른 것으로 설정되며 프로그래밍은 숫자를 정렬 할 때 기본값을 변경하지 않아도됩니다.


알파벳 / 숫자 혼합 상황에서 숙련 된 사용자는 일관되고 예측 가능하기 때문에 사전 분류 를 선호하는 경향이 있습니다. "지능적으로"사전 식과 숫자 정렬을 혼합하려고하는 모든 앱은 약간 다르게 작동하여 의심스러운 유틸리티를 만듭니다.
j__m
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.