버블 정렬(Bubble Sort) 알고리즘의 동작 원리를 설명하고, 이 알고리즘의 시간 복잡도와 실제 시스템 개발에서 잘 사용되지 않는 이유를 함께 설명해주세요.
힌트 · 버블 정렬은 인접한 두 원소를 비교하여 정렬하는 방식입니다. 최악 및 평균 시간 복잡도가 O(N^2)로 비효율적입니다.
모범답안
버블 정렬은 이름 그대로 물방울이 올라오듯, 인접한 두 원소를 계속 비교하면서 가장 큰(또는 작은) 원소를 맨 뒤로 보내는 방식입니다. 마치 거품이 올라오듯 말이죠. 한 번의 패스가 끝나면 가장 큰 원소가 제자리를 찾고, 다음 패스에서는 남은 원소들 중 가장 큰 원소가 제자리를 찾습니다. 이 과정을 배열의 모든 원소가 정렬될 때까지 반복합니다.
시간 복잡도는 최악의 경우와 평균적인 경우 모두 O(N^2)입니다. 이는 배열의 크기가 커질수록 정렬에 걸리는 시간이 제곱으로 늘어난다는 뜻이라, 실제 시스템에서는 매우 비효율적입니다. 예를 들어, 이미 정렬된 배열의 경우를 제외하고는 항상 N번의 비교와 N-1번의 교환이 발생합니다.
실제 시스템 개발에서 잘 사용되지 않는 주된 이유는 바로 이 O(N^2)의 비효율성 때문입니다. 데이터 양이 조금만 많아져도 성능 저하가 심각해지기 때문에, 퀵 정렬, 병합 정렬, 힙 정렬과 같이 평균적으로 O(N log N)의 시간 복잡도를 갖는 더 효율적인 알고리즘들이 선호됩니다. 물론, 버블 정렬도 약간의 최적화(한 번도 교환이 일어나지 않으면 정렬이 끝났다고 판단)를 통해 최선(이미 정렬된 경우)의 경우 O(N)의 시간 복잡도를 가질 수는 있지만, 이는 일반적인 상황과는 거리가 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 배열(Array)과 연결 리스트(Linked List)의 주요 차이점은 무엇이며, 각각 어떤 상황에서 더 효율적인 자료구조인지 구체적인 예를 들어 설명해주세요.
- 스택(Stack)과 큐(Queue) 자료구조의 정의와 각각 LIFO(Last-In, First-Out) 및 FIFO(First-In, First-Out) 원리를 설명하고, 실제 프로그래밍에서 사용되는 예를 들어주세요.
- 이진 탐색(Binary Search) 알고리즘은 어떻게 동작하며, 이 알고리즘을 사용하기 위한 데이터의 전제 조건은 무엇인가요? 시간 복잡도는 어떻게 되나요?
- 재귀 함수(Recursive Function)는 무엇이며, 재귀 함수를 작성할 때 반드시 고려해야 할 두 가지 중요한 요소는 무엇인가요?
- 해시 테이블(Hash Table) 자료구조는 무엇이며, 해싱(Hashing)의 기본 원리와 충돌(Collision)이 발생했을 때 해결하는 일반적인 방법 두 가지를 설명해주세요.
- 퀵 정렬(Quick Sort)과 병합 정렬(Merge Sort)의 동작 원리를 비교하고, 각각 어떤 상황에서 더 효율적인지 시간 복잡도와 공간 복잡도 측면에서 설명해주세요.