Python의 내장 sort () 메서드 정보


104

sort()파이썬에 내장 된 방법 은 어떤 알고리즘을 사용합니까? 해당 메서드의 코드를 볼 수 있습니까?


10
물론 메서드에 대한 코드를 볼 수 있습니다. Python은 오픈 소스 프로젝트입니다. 그러나이 메서드는 아마도 C로 구현 될 것이므로 이해하려면 C에 대해 조금 알아야합니다.
Chris Lutz

버전이 중요합니까?
meder omuraliev 2010 년

@melder : 아니요 =) 프로 알고리즘을 살펴보고 싶습니다. : P @chris : 어떻게?
Johannes

3
Python 인터프리터에 소스 코드를 다운로드합니다. 나는 그들이 sort()방법 을 구현하는 곳 이나 인터프리터의 형식이 무엇인지 모르지만 어딘가에 있어야하며 속도 문제를 위해 C로 구현되었을 것입니다.
Chris Lutz

다음 은 사용 예입니다
Hari Ganesan 2014

답변:


119

확실한! 코드는 여기에 있습니다 . 함수로 시작 islt하여 잠시 QUITE를 진행합니다 .-). Chris의 의견에서 알 수 있듯이 C 코드입니다. 또한 텍스트 설명, 결과 등을 위해이 텍스트 파일 을 읽고 싶을 것입니다 .

C 코드보다 Java 코드를 읽는 것을 선호한다면 Joshua Bloch의 timsort 구현 및 Java 용 (1997 년에 Java에서 여전히 사용되는 수정 된 mergesort를 구현 한 사람이기도합니다. Java가 결국 그의 최근 팀 소트 항구로 전환).

timsort의 Java 포트에 대한 몇 가지 설명은 여기 , diff는 여기 (필요한 모든 파일에 대한 포인터 포함), 키 파일은 여기에 있습니다 . FWIW, 저는 Java 프로그래머보다 더 나은 C 프로그래머입니다. Joshua의 Java 코드는 Tim의 C 코드보다 전반적으로 더 읽기 쉽습니다 .-).


4
@Chris, "Browse Python sources"는 내 모든 브라우저의 북마크 바에있는 바로 가기입니다 . svn.python.org/view/python/trunk ;-)를 가리 킵니다 .
Alex Martelli

함수 list_ass_item()가 무엇을하는지 알고 싶습니다 . :)
Chris Lutz

2
목록의 항목에 대한 할당을 수행합니다 (list_ass_slice가 목록의 조각에 할당을 수행하는 것처럼), 정렬과는 아무 상관이 없습니다. 나는 "할당"의 약자가 ... 재미있는 이름을 되겠군요
알렉스 마르 텔리

3
의 현재 버전 에는 listsort.txt일반적인 혼란을 해결하는 몇 가지 메모가 추가되었습니다.
Tim Peters


9

초기 파이썬 버전에서 sort 함수는 수정 된 버전의 quicksort를 구현했습니다. 그러나 불안정한 것으로 간주되어 2.3에서 적응 형 병합 정렬 알고리즘을 사용하도록 전환했습니다.


quicksort는 '불안정한 것으로 간주'되지 않습니다. 일반적으로 사용되는 정의에 따르면 quicksort는 불안정합니다. 즉,이 정렬 중에 두 개체가 동일하면 원래 순서가 유지되지 않습니다. 불안정한 정렬 알고리즘이 있다는 것은 단순히 정렬 호출을 연결하는 것이 아니라 여러 기준으로 데이터를 현명하게 정렬하기 위해 모든 종류의 '마법'을 찾아야 함을 의미합니다. DOB별로 정렬하고 이름을 지정하려면 timsort에서 , 먼저 이름으로 정렬 한 다음 DOB Quicksort로는 그렇게 할 수 없습니다
Tony Suffolk 66
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.