⭐⭐⭐⭐⭐
Quick Sort은 분할정복(divide and conquer)을 통해 주어진 배열을 정렬한다.
※ 분할정복
문제를 2가지 작은 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략
주어진 배열을 피벗(pivot)이라는 기준 요소를 중심으로 두 부분으로 나누고, 각각의 부분배열을 재귀적으로 정렬하여 전체를 정렬하는 알고리즘이다.
배열 가운데서 하나의 원소(=피벗;pivot)를 고른다. 보통 첫번째 요소를 피벗으로 고른다.
배열을 둘로 나눈다. 이때, 값이 피벗보다 작으면 왼쪽에, 피벗보다 크면 오른쪽에 둔다.
pivot보다 작은 값 | pivot | pivot보다 큰 값
※ 분할을 마친 뒤 pivot은 더 이상 이동 X
분할된 부분배열을 각각 정렬한다. (반복)
l은 왼→오 로 진행하며 피벗보다 크면 정지r은 왼←오 로 진행하며 피벗보다 작으면 정지l와 r 를 swapl은 왼→오 로 진행, r은 왼←오 로 진행하며각 부분배열이 정렬되면, 피벗과 합쳐서 전체배열을 정렬한다.
비교횟수 = 재귀호출의 깊이 * 각 순환 호출 단계의 비교 연산
(log₂n)(n)번비교횟수 = n*log₂n이동횟수 = 비교횟수보다 적으므로 무시
(n)(n)번비교횟수 = n*n = n²이동횟수 = 비교횟수보다 적으므로 무시
주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 O(n)이다.