본문 바로가기
CODE/CodeKnowledge

[자료구조] 퀵정렬(Quick Sort)이란?

by 솔리닉__ 2023. 11. 4.
반응형

 

퀵정렬(Quick Sort)은 분할 정복(divide and conquer) 알고리즘의 한 예로, 평균적인 경우 매우 빠른 실행 시간을 자랑하는 정렬 방식입니다. 

 

퀵정렬의 정의 

  1. 피벗 선택(Pivot Selection): 배열에서 하나의 요소를 선택합니다. 이 요소를 피벗(pivot)이라고 합니다.
  2. 분할(Partitioning): 배열을 피벗을 기준으로 재배치하여, 피벗의 왼쪽에는 피벗보다 작은 모든 요소들이 오고, 피벗의 오른쪽에는 피벗보다 큰 모든 요소들이 오도록 합니다.
  3. 재귀 호출(Recursive Call): 피벗을 중심으로 나눈 두 부분 배열에 대해, 이 과정을 재귀적으로 반복합니다.
  4. 종료 조건(Base Case): 부분 배열의 크기가 1이하가 되면 더 이상 정렬을 수행할 필요가 없습니다.

퀵정렬의 성능은 피벗 선택에 크게 의존합니다. 최악의 경우(예를 들어, 이미 정렬된 배열에서 최소값이나 최대값을 피벗으로 선택했을 때), 퀵정렬의 시간 복잡도는 O(n2)가 됩니다. 그러나 피벗을 적절히 선택할 경우, 평균적인 시간 복잡도는 O(nlogn) 이 됩니다.

 

퀵정렬 속도비교 (삽입정렬) 

 

퀵정렬은 평균적으로 매우 빠른 성능을 나타내지만, 모든 상황에서 가장 빠른 정렬 방법은 아닙니다.

 

예를 들어, 배열이 이미 정렬된 경우 삽입 정렬(Insertion Sort)이 O(n2)의 시간 복잡도로 매우 효율적입니다. 이는 삽입 정렬이 이미 정렬된 데이터에 대해서는 거의 아무런 작업을 하지 않기 때문입니다. 반면, 퀵정렬은 이러한 최적의 상황에서도 분할을 계속하기 때문에 불필요한 비교를 많이 수행하게 되어 더 비효율적일 수 있습니다.

 

다른 한 예로, 데이터가 거의 정렬된 상태에서는 버블 정렬(Bubble Sort)이나 삽입 정렬이 빠를 수 있지만, 이들은 평균적으로 O(n2)의 시간 복잡도를 가집니다. 따라서 대체로 많은 양의 데이터를 다룰 때 퀵정렬은 이들보다 더 나은 성능을 보입니다.

 

최종적으로, 퀵정렬은 일반적인 경우에 매우 효율적인 정렬 방법이지만, 최악의 경우나 특정 조건 하에서는 다른 정렬 알고리즘이 더 적합할 수 있습니다.

반응형

댓글