약간 복잡한 관점에서 lo 및 hi와 같은 변수는 상수 공간을 사용하지 않습니다. O(log n) 비트를 사용하여 n 항목 목록으로 인덱싱합니다. 모든 스택 프레임에는 이러한 변수가 있기 때문에 Sedgewick의 트릭을 사용하는 퀵정렬에는 O(log n)²의 공백이 필요합니다. 이 공간 요구 사항은 너무 끔찍하지 않습니다, 그래도, 목록에 고유 한 요소가 포함되어 있는 경우, 그것은 공간의 적어도 O (n 로그 n) 비트가 필요하기 때문에. 입력이 임의 순열인 경우 피벗의 임의 순위가 있으므로 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)입니다. 알고리즘은 피벗이 중간 절반에 있는지 확인할 필요가 없습니다.

먼저 중앙값을 A[hi]에 넣은 다음 위에 제시된 기본 알고리즘과 같이 A[hi]의 새 값이 피벗에 사용됩니다. 두 개의 인덱스 i와 j가 있으며 파티션 알고리즘의 맨 시작 부분에i는 배열의 첫 번째 요소를 가리키고 j는 마지막 인덱스를 가리킵니다. 그런 다음 알고리즘은 피벗과 같거나 같은 값을 가진 요소가 발견 될 때까지 i를 앞으로 이동합니다. 인덱스 j는 피벗과 같거나 값이 작은 요소가 발견될 때까지 뒤로 이동됩니다. 나는 ≤ j경우 그들은 교환하고 나는 다음 위치 (i + 1), j 단계는 이전 (j — 1)로 단계. 알고리즘이 중지되면, 내가 j보다 커지면 특히 n 요소를 정렬하는 데 필요한 예상 비교 횟수(무작위 피벗 선택으로 § 분석 참조)는 1.386 n log n. Median-of-three 피벗이 Cn, 2 1.188로 내려옵니다. n log n, 예상 스왑 수가 3% 증가합니다. [6] 더 강한 피벗 규칙은 더 큰 배열의 경우 9번째, 재귀 중앙값(Mo3)을 선택하는 것입니다[6] 일반적인 형태로 배열 빠른 정렬을 정렬하기 위해 MergeSort보다 빠른 정렬이 선호되는 이유는 내부 정렬입니다(즉, 어떤 것도 필요하지 않습니다. 추가 저장소) 병합 정렬에는 O(N) 추가 저장소가 필요하지만, N은 어레이 크기를 나타내며 이는 상당히 비쌀 수 있습니다. 병합 정렬에 사용되는 추가 공간을 할당하고 할당 해제하여 알고리즘의 실행 시간이 증가합니다.