개요
빠른 분류는 Tony Hall이 개발 한 분류 알고리즘입니다. 평균 상황에서 N 항목의 순서는 ο (nlogn) 비교가 필요합니다. 실제로, 빠른 분류는 일반적으로 다른 ο (nlogn) 알고리즘보다 상당히 빠릅니다. 내부 루프는 대부분의 아키텍처에서 효율적으로 구현 될 수 있고 대부분의 실제 데이터에서는 설계 선택을 결정하고 시간이 필요한 2 차 항의 가능성을 줄일 수 있기 때문입니다.
빠른 분류, 레코드를 한 순서를 통해 두 개의 독립 부품으로 분류 할 수 있습니다. 여기서 일부 레코드의 키워드는 다른 부분의 키워드보다 작으며, 두 레코드는 전체 시퀀스를 주문하는 목적을 달성하기 위해 별도로 정렬됩니다.
이미지 그림 :
단계
벤치 마크 요소를 선택할 때, 첫 번째 요소 또는 마지막 요소는 일반적으로 하나의 눈소를 통해 두 개의 독립 부품으로 정렬되도록 레코드를 나누기 위해 선택됩니다. 여기서 일부 레코드의 요소 값은 벤치 마크 요소 값보다 작습니다. 다른 부분에 기록 된 요소는이 시점에서 참조 값보다 큽니다. 참조 요소는 정렬 된 후 올바른 위치에 있으며 전체 시퀀스가 순서가 될 때까지 동일한 방식으로 정렬됩니다.
예
원시 데이터 :
3 5 2 6 2
벤치 마크로 3을 선택하십시오
첫 번째 라운드
오른쪽에서 왼쪽으로 3, 2 경기보다 작은 것을 찾아서 2 및 3 2 5 2 6 3을 한 번 조정하면 왼쪽에서 3, 5 일치를 찾기 위해 검색 방향이 반전되고 오른쪽에서 왼쪽으로 조정하여 3, 2, 2 경기를 조정합니다.
라운드 2
위와 동일한 방법은 [2 2] 및 2 2 3 6 5에 대해 수행됩니다.
세 번째 라운드
위와 동일한 방법은 [6 5] 및 2 2 3 5 6에 대해 수행됩니다.
최종 결과
2 2 3 5 6
코드 구현 (Java)
com.coder4j.main.arithmetic.sorting; public class quick {private static int mark = 0; * @param array * @param b * / private static void swap (int [] array, int b) 온도; // 일치, 스위치 시스템을 찾으십시오. "get"; int i : array ( "진행 중" + 마크 + "휠 분리, 영역 :" + low + "-" + High); while (while) {high array [high]> = base. + Base + "대형 포인터 변경 :" + Low + "-"} 스왑 (Array, Low, High); } / ** 배열의 빠른 정렬 * @param 배열 * @param low * @param height *] QuickSort (int [] 배열, int 낮음) } /** * 빠른 정렬 * * @param array * @return */ public int [] QuickSort (array, 0, array.length -1); ");}}}출력 테스트 결과 :
모든 분리 라운드가 수행되고 있습니다. 영역은 2와 3입니다. 두 번째 분리 라운드는 3과 5입니다. 두 번째 라운드는 2 3 2 6 5입니다. 두 번째 분리 라운드는 2와 3입니다. 두 번째 분리 라운드는 2와 3입니다. 두 번째 분리 라운드는 2와 3입니다. 두 번째 분리 라운드는 2와 2입니다. 3 라운드는 2이고 3은 2이고 3은 2입니다 5. 마지막 결과는 2는 2이고 3은 5. 6입니다. 마지막 결과는 2 2 3 5 6입니다.
테스트 후 예제의 결과와 일치합니다.