본문 바로가기
소프트웨어

퀵 정렬(Quick Sort) - 정의 / 예시 코드

by 얼그레이_티 2023. 5. 31.
728x90
반응형

 

퀵 정렬(Quick Sort)은 평균적으로 매우 효율적인 정렬 알고리즘 중 하나로 알려져 있습니다. 분할 정복(Divide and Conquer) 방식을 기반으로 동작하며, 배열을 작은 값의 부분 배열과 큰 값의 부분 배열로 분할하고 재귀적으로 정렬하는 방식입니다.


아래는 퀵 정렬의 동작 과정을 단계별로 설명한 것입니다.

 


1. 배열에서 하나의 원소를 기준으로 선택합니다. 이를 피벗(Pivot)이라고 합니다. 피벗은 보통 첫 번째 원소, 마지막 원소, 중간 원소 등으로 선택됩니다.

 

2. 피벗을 기준으로 배열을 두 부분으로 분할합니다. 피벗보다 작은 원소는 피벗의 왼쪽에 위치하고, 피벗보다 큰 원소는 피벗의 오른쪽에 위치하도록 배열을 재배치합니다. 이 단계를 피벗을 기준으로 분할하는 Partition 단계라고 합니다.

 

3. 분할된 두 개의 부분 배열에 대해 재귀적으로 위의 과정을 반복합니다. 각 부분 배열은 독립적으로 퀵 정렬을 수행합니다.

 

4. 재귀적인 호출이 끝나면 정렬이 완료됩니다. 각 부분 배열은 피벗을 기준으로 작은 값의 부분 배열과 큰 값의 부분 배열로 분할되며, 이들을 합치면 정렬된 배열이 됩니다.

 

반응형

 

퀵 정렬은 배열을 분할하고 정렬하는 과정에서 효율적으로 동작하는 특징이 있습니다. 또한, 대부분의 경우에 있어서 평균적인 실행 시간이 매우 빠르며, 공간 복잡도도 상대적으로 작습니다. 하지만 최악의 경우에는 분할이 불균형하게 되어 실행 시간이 길어질 수 있는 단점도 있습니다.

퀵 정렬은 다양한 방식으로 구현될 수 있습니다. 피벗 선택 방식, 분할 방식, 재귀 호출 방식 등 구현에 따라 성능이 달라질 수 있습니다. 효율적인 퀵 정렬을 위해서는 피벗 선택과 분할을 최적화하는 방법에 주의해야 합니다.

 

 

아래는 C++로 구현된 퀵 정렬의 예시 코드입니다.

 

 

위의 예시 코드를 실행하면, 배열 {64, 25, 12, 22, 11}가 오름차순으로 정렬되어 {11, 12, 22, 25, 64}가 출력됩니다.

이 코드에서 partition 함수는 피벗을 기준으로 배열을 분할하는 역할을 합니다. quickSort 함수는 분할된 부분 배열을 재귀적으로 정렬하는 역할을 합니다. 이를 통해 퀵 정렬이 수행됩니다.

퀵 정렬은 피벗의 선택 방식, 분할 방식 등에 따라 구현 방법이 달라질 수 있습니다. 또한, 효율적인 퀵 정렬을 위해서는 피벗의 선택과 분할 방식을 최적화하는 방법에 주의해야 합니다.

 

728x90

댓글