퀵 정렬 예제

예제를 너무 길게 만들지 않기 위해 첫 번째 재귀 단계만 표시합니다. 그러나 실제로 {1, 2, 5, 7, 3} 및 {14, 7, 26, 12}가 재귀적으로 정렬됩니다. Quicksort의 분할 및 정복 공식은 작업 병렬처리를 사용하여 병렬화할 수 있도록 합니다. 분할 단계는 분할된 배열의 해당 섹션에서 각 배열 요소에 대한 인덱스를 계산하기 위해 병렬 접두사 합계 알고리즘을 사용하여 수행됩니다. [23] [24] 크기 n의 배열을 감안할 때 분할 단계는 O(log n) 시간에서 O(n) 작업을 수행하고 O(n) 추가 스크래치 공간이 필요합니다. 배열을 분할한 후 두 파티션을 병렬로 재귀적으로 정렬할 수 있습니다. 피벗을 선택하는 것이 이상적인 선택이라고 가정할 때 병렬 퀵정렬은 O(n) 추가 공간을 사용하여 O(log² n) 시간에서 O(n log n) 작업에서 크기 n의 배열을 정렬합니다. 빠른 정렬 자습서 및 참고 사항 | 알고리즘 | HackerEarth 우리는 피벗 값 선택, 작은 데이터 볼륨에 대한 빠른 정렬 최적화 등과 같은 고급 빠른 정렬 문제를 검사하는 “빠른 정렬 심층”기사를 개발할 것입니다. 입력이 임의 순열인 경우 피벗의 임의 순위가 있으므로 50% 중간에 있을 수 없습니다. 그러나 임의 순열에서 시작하면 각 재귀 호출에서 피벗은 목록에서 임의의 순위를 가지므로 절반 정도의 중간 50 %에 있습니다. 그것으로 충분합니다. 당신이 동전을 뒤집는 다고 상상해보십시오 : 머리는 피벗의 순위가 중간에 50 퍼센트, 꼬리는 그렇지 않다는 것을 의미합니다.

당신이 k 머리를 얻을 때까지 반복해서 동전을 뒤집고 있다고 상상해보십시오. 이 시간이 오래 걸릴 수 있지만, 평균 2k 플립이 필요하고, 100k 플립 후 k 머리를 얻을 하지 않습니다 기회는 매우 황당 (이 체르노프 경계를 사용 하 여 엄격 하 게 만들 수 있습니다). 같은 인수로 Quicksort의 재귀는 2 개의 로그 4 / 3 n {displaystyle 2log _{4/3}n}의 호출 깊이에서 평균적으로 종료됩니다. 그러나 평균 호출 깊이가 O(log n)이고 대부분의 n 요소에서 호출 트리 프로세스의 각 수준이면 평균적으로 수행되는 총 작업량은 제품 O(n log n)입니다. 알고리즘은 피벗이 중간 절반에 있는지 확인할 필요가 없습니다.

2nd August 2019 Uncategorized