퀵 정렬(Quick Sort)이란?
퀵 정렬은 피벗(pivot)을 사용하여 배열을 두 부분으로 나누고, 각 부분을 재귀적으로 정렬하는 방식으로 작동하는 정렬 알고리즘입니다.
키워드
-
피벗
: 배열을 분할하는 기준이 되는 요소입니다. -
분할
: 피벗을 기준으로 배열을 두 부분으로 나눕니다. -
정복
: 분할된 각 부분을 개별적으로 정렬합니다. -
최악 시간 복잡도
: O(n^2) - 배열이 이미 역순일 때 발생합니다. -
평균 시간 복잡도
: O(n log n) - 대부분의 경우, 퀵 정렬은 로그 선형 시간 복잡도를 가집니다.
퀵 정렬의 단계별 과정
-
피벗 선택
: 배열에서 하나의 요소(피벗)를 선택합니다. -
분할
: 피벗을 기준으로 배열을 두 부분으로 나눕니다. 이때, 피벗보다 작은 요소는 피벗의 왼쪽, 큰 요소는 오른쪽에 배치됩니 다. -
재귀적 정렬
: 분할된 각 부분을 재귀적으로 다시 퀵 정렬합니다. -
병합 단계
: 정렬된 부분 배열들을 병합합니다. 퀵 정렬에서는 실제로 병합 과정이 없지만, 재귀적으로 정렬된 부분들이 결합되어 전체 배열이 정렬됩니다. -
정렬 완료
: 모든 부분 배열이 정렬되어 완전히 정렬된 배열이 됩니다.
퀵 정렬의 특징
-
비안정 정렬
: 퀵 정렬은 동일한 값을 가진 원소의 상대적 순서가 변경될 수 있는 비안정적인 정렬 방법입니다. -
메모리 최적화
: 추가적인 메모리를 거의 사용하지 않고, 원래의 배열 내에서 정렬을 수행합니다. -
효율적인 평균 성능
: 대부분의 실제 상황에서 퀵 정렬은 매우 빠르며, 평균적으로 O(nlog n)의 시간 복잡도를 갖습니다. -
피벗 선택 중요성
: 피벗 선택은 퀵 정렬의 성능에 큰 영향을 미칩니다. 일반적으로 중간값이나 무작위 요소가 피벗으로 좋은 선택입니다.
퀵 정렬의 장단점
-
장점
: 대규모 데이터에 대한 높은 효율성, 추가 메모리 사용이 거의 없음. -
단점
: 최악의 경우 O(n^2)의 시간 복잡도와 비안정성
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!