에 대한 마크 센드라 마르토렐의 사진 팀소트:학계에서는 구축되지 않은 실제 세계를 위해 만들어진 매우 빠르고 안정적인 정렬 알고리즘.
업데이트 된 문서를 보려면 여기를 클릭하십시오:
팀소트 는 실제 데이터에 효율적이며 학술 실험실에서 생성되지 않은 정렬 알고리즘입니다. 팀 피터스는 2001 년 파이썬 프로그래밍 언어를 위한 팀소트를 만들었다. 먼저 정렬하려는 목록을 분석 한 다음 목록 분석을 기반으로 접근 방식을 선택합니다.
알고리즘이 발명 된 이후 파이썬,자바,안드로이드 플랫폼 및 옥타브에서 기본 정렬 알고리즘으로 사용되었습니다.예를 들어,두 개의 로그가 있습니다. 빅 오 표기법에 대해 알아 보려면,이 읽기.
팀 정렬의 정렬 시간은 병합 정렬과 동일하며,이는 다른 대부분의 정렬보다 빠릅니다. 팀 정렬은 실제로 삽입 정렬 및 병합을 사용합니다.
피터스는 대부분의 실제 데이터 세트에 존재하는 이미 정렬 된 요소를 사용하도록 팀 정렬을 설계했습니다. 이러한 이미 정렬 된 요소를”자연 실행”이라고 부릅니다. 요소를 실행으로 수집하는 데이터를 반복하고 동시에 이러한 실행을 하나로 병합합니다.
배열에 64 개 미만의 요소가 있습니다.
정렬하려는 배열에 64 개 미만의 요소가 있으면 팀 정렬은 삽입 정렬을 실행합니다.
삽입 정렬은 작은 목록에서 가장 효과적인 간단한 정렬입니다. 그것은 큰 목록에서 매우 느리지 만,작은 목록 매우 빠릅니다. 삽입 정렬의 아이디어는 다음과 같습니다:
요소를 하나씩 봐
올바른 위치에 요소를 삽입하여 정렬 된 목록 작성
다음은 삽입 정렬이 목록을 정렬하는 방법을 보여주는 추적 테이블입니다
이 경우 새로 정렬 된 요소를 배열 시작 부분에서 시작하는 새 하위 배열에 삽입합니다.
여기에 삽입 정렬을 보여주는 지프가 있습니다.:
실행에 대한 자세한
목록이 알고리즘보다 64 개 요소보다 큰 경우 엄격하게 증가 또는 감소하는 부분을 찾고 목록을 통해 첫 번째 패스를 만들 것입니다. 부분이 감소하는 경우,그 부분을 반전 할 것이다.
따라서 실행이 감소하면 다음과 같이 표시됩니다(실행이 굵게 표시됨).:
감소하지 않으면 다음과 같습니다:
민런은 배열의 크기에 따라 결정되는 크기입니다. 알고리즘은 임의의 배열에서 대부분의 실행이 길이가 되거나 최소 실행이 되도록 선택합니다. 2 개의 배열을 병합하는 것은 실행 수가 2 의 거듭 제곱과 같거나 약간 적을 때 더 효율적입니다. 팀소트에서는 민룬이 2 의 거듭 제곱과 같거나 작은지 확인함으로써 이 효율을 보장하기 위해 민룬을 선택합니다.
알고리즘은 32 에서 64 사이의 범위에서 최소 실행을 선택합니다. 원래 배열의 길이를 민룬으로 나눈 값이 2 의 제곱과 같거나 약간 작도록 민룬을 선택합니다.
실행의 길이가 최소 실행보다 작으면 최소 실행에서 벗어난 실행의 길이를 계산합니다. 이 새 번호를 사용하면 실행보다 앞서 많은 항목을 잡고 삽입 정렬을 수행하여 새 실행을 만듭니다.
따라서 최소 실행이 63 이고 실행 길이가 33 이면 63-33=30 을 수행합니다. 그런 다음 실행의 끝 앞에서 30 요소를 잡아,그래서이 실행에서 30 항목이며,다음 새 실행을 만들 삽입 정렬을 수행합니다.