위키득계정 ↗
기술

퀵 정렬

퀵 정렬기술
영문명
Quicksort
핵심 단계
피벗을 기준으로 한 분할
전형적 평균 시간
O(n log n)
전형적 최악 시간
O(n²)
퀵 정렬은 기준 원소인 피벗을 정하고 자료를 분할한 뒤 각 부분에 같은 방식을 적용하는 정렬 알고리즘이다. 전형적인 구현의 평균 시간 복잡도는 O(n log n)이지만 분할이 불균형하게 반복되면 O(n²)이 될 수 있다.

분할을 반복하는 방식

여섯 수를 정렬할 때 기준보다 작은 값과 큰 값을 나누고 각 묶음을 다시 나눌 수 있다. 전체를 한 번에 완성하는 대신 더 작은 문제들을 풀어 순서를 만든다. 피벗과 같은 값의 처리 방식도 구현에서 정해야 한다.

분할의 균형과 연산량

부분들이 비슷한 크기로 나뉘면 재귀적으로 처리할 단계 수를 줄일 수 있다. 반대로 한쪽에 거의 모든 원소가 남는 상황이 반복되면 연산량이 크게 늘어난다. 이름에 빠르다는 의미가 있어도 모든 입력과 구현에서 같은 속도를 보장하는 것은 아니다.

피벗 선택과 변형

피벗을 고르는 방법과 분할 절차에는 여러 방식이 있다. 무작위 선택이나 작은 구간에서 다른 정렬을 쓰는 방법 등으로 동작을 조정할 수 있다. 이런 변형의 성능을 기본적인 퀵 정렬의 성질과 구분해야 한다.

메모리와 같은 값의 순서

배열 내부에서 교환하는 구현은 별도의 큰 배열 없이 동작할 수 있지만 재귀 호출을 위한 공간은 고려해야 한다. 흔한 교환 기반 구현은 같은 키를 가진 원소들의 원래 순서를 보장하지 않는다. 안정성과 보조 공간은 실제 구현을 기준으로 확인한다.

관련 문서

정렬 알고리즘 / 배열 / 재귀 / 알고리즘 / 삽입 정렬 / 선택 정렬