CS 기초 · 중급
퀵 정렬(Quick Sort)과 병합 정렬(Merge Sort)의 동작 원리를 비교하고, 각각 어떤 상황에서 더 효율적인지 시간 복잡도와 공간 복잡도 측면에서 설명해주세요.
힌트 · 퀵 정렬은 평균적으로 빠르지만 최악의 경우 성능 저하가 있고, 병합 정렬은 안정적이며 최악의 경우에도 일정한 성능을 보입니다.
분할 정복pivotO(n log n)O(n)최악의 경우 O(n^2)
모범답안
퀵 정렬과 병합 정렬은 모두 분할 정복 기법을 사용하는 효율적인 정렬 알고리즘입니다.
퀵 정렬은 먼저 '피벗'이라는 기준 요소를 선택하고, 배열을 피벗보다 작은 요소와 큰 요소로 분할합니다. 이 과정을 재귀적으로 반복하여 정렬합니다. 평균적으로 O(n log n)의 시간 복잡도를 가지지만, 피벗 선택이 좋지 않으면 최악의 경우 O(n^2)까지 성능이 저하될 수 있습니다. 공간 복잡도는 재귀 호출 스택 때문에 O(log n)에서 O(n) 정도입니다.
병합 정렬은 배열을 절반으로 계속 나누다가, 각 부분 배열을 정렬한 후 다시 합치는(병합) 방식으로 동작합니다. 이 병합 과정에서 정렬이 이루어집니다. 퀵 정렬과 달리 항상 O(n log n)의 시간 복잡도를 보장하며, 최악의 경우에도 성능이 일정합니다. 하지만 정렬된 두 부분 배열을 합치기 위해 추가적인 공간이 필요하므로 공간 복잡도는 O(n)입니다.
따라서 데이터가 이미 어느 정도 정렬되어 있거나 메모리 제약이 크지 않다면 퀵 정렬이 평균적으로 더 빠를 수 있습니다. 반면, 데이터의 분포를 알 수 없거나 최악의 경우에도 일정한 성능이 중요하다면 병합 정렬이 더 안정적인 선택입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 버블 정렬(Bubble Sort) 알고리즘의 동작 원리를 설명하고, 이 알고리즘의 시간 복잡도와 실제 시스템 개발에서 잘 사용되지 않는 이유를 함께 설명해주세요.
- 재귀 함수(Recursive Function)는 무엇이며, 재귀 함수를 작성할 때 반드시 고려해야 할 두 가지 중요한 요소는 무엇인가요?
- 해시 테이블(Hash Table) 자료구조는 무엇이며, 해싱(Hashing)의 기본 원리와 충돌(Collision)이 발생했을 때 해결하는 일반적인 방법 두 가지를 설명해주세요.
- 특정 네트워크에서 최단 경로를 찾아야 할 때 너비 우선 탐색(BFS)과 깊이 우선 탐색(DFS) 중 어떤 알고리즘을 선택해야 하며, 그 이유는 무엇인지 설명해주세요.
- 동적 계획법(Dynamic Programming)이 그리디(Greedy) 알고리즘과 어떻게 다른지 설명하고, 두 알고리즘이 각각 어떤 문제 유형에 주로 적용되는지 구체적인 예시를 들어주세요.
- 해시 테이블(Hash Table)에서 해시 충돌(Hash Collision)이 발생했을 때 이를 해결하는 대표적인 방법 두 가지를 설명하고, 각각의 장단점을 비교해주세요.