Ch.8 정렬과 탐색
O(n²) 정렬 — Bubble, Selection, Insertion
가장 직관적인 정렬, 하지만 가장 느리다
카드를 손에 들고 정리하는 방법을 떠올려보세요. 하나씩 비교하며 자리를 바꾸는 것 — 이것이 O(n²) 정렬의 본질입니다.
왜 이 단순한 정렬들을 알아야 할까? 어차피 면접에서는 빠른 정렬을 쓰는데?
O(n²) 정렬을 이해해야 O(n log n) 정렬이 왜 빠른지 비교 설명할 수 있습니다.
핵심 개념
Bubble Sort
인접한 두 원소를 비교하여 큰 값을 뒤로 보내는 정렬
안정 정렬(Stable)
같은 값의 원소가 원래 순서를 유지하는 정렬
핵심 내용
거품이 수면 위로 올라오듯 큰 값이 뒤로 밀려납니다
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped: # 최적화: 교환 없으면 종료
break
return arr`swapped` 플래그로 이미 정렬된 경우 조기 종료할 수 있습니다 — 최선 O(n)
Bubble Sort가 배열을 어떻게 정렬하는지 추적합니다
매 패스마다 가장 큰 값이 배열 끝으로 이동합니다
매 라운드마다 가장 작은 값을 찾아 앞쪽에 배치합니다
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_idx = i
for j in range(i + 1, n):
if arr[j] < arr[min_idx]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arrSelection Sort 특성: • 시간: 항상 O(n²) — 최선도 O(n²) • 공간: O(1) — in-place • 불안정 정렬 — swap 시 순서 깨질 수 있음 • swap 횟수 최소: 최대 n번만 교환
Selection Sort는 swap 횟수가 적어 교환 비용이 클 때 유리합니다
카드를 한 장씩 받아 올바른 위치에 삽입하는 방식입니다
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j] # 오른쪽으로 밀기
j -= 1
arr[j + 1] = key # 삽입
return arrInsertion Sort 특성: • 시간: 최선 O(n), 평균/최악 O(n²) • 공간: O(1) — in-place • 안정 정렬 • 거의 정렬된 데이터에서 매우 빠름
Python의 Timsort가 Insertion Sort를 내부적으로 사용하는 이유: 소규모·거의 정렬된 구간에 최적
세 가지 O(n²) 정렬을 한눈에 비교합니다
| 정렬 | 최선 | 평균 | 최악 | 안정 | 특징 | |------|------|------|------|------|------| | Bubble | O(n) | O(n²) | O(n²) | ✅ | 교환 기반 | | Selection | O(n²) | O(n²) | O(n²) | ❌ | swap 최소 | | Insertion | O(n) | O(n²) | O(n²) | ✅ | 거의 정렬 시 최적 |
면접 포인트: Insertion Sort가 실전에서 가장 유용합니다 — Timsort의 핵심 구성 요소!
이미 정렬된 배열에 대해 가장 빠르게 동작하는 O(n²) 정렬은?
Selection Sort는 안정 정렬이다
O(n²) 정렬 마스터!
핵심 용어
시간 복잡도
최선 O(n), 평균/최악 O(n²)
공간 복잡도
O(1) — in-place
안정 정렬
같은 값의 순서 유지
정리 노트
O(n²) 정렬 3총사
핵심 비교
- Bubble Sort
- 인접 교환, 안정, 최선 O(n)
- Selection Sort
- 최솟값 선택, 불안정, swap 최소
- Insertion Sort
- 삽입 방식, 안정, 거의 정렬 시 최적
면접 팁
- Timsort
- Insertion + Merge의 하이브리드
- 안정 정렬
- 같은 값의 원래 순서 유지 — DB 정렬 시 중요
O(n²) 정렬의 '왜 느린지'를 설명할 수 있어야 O(n log n) 정렬의 가치를 어필합니다!
시각 자료
핵심 정리
- 1Bubble Sort — 인접 교환, 조기 종료 최적화
- 2Selection Sort — swap 최소, 불안정
- 3Insertion Sort — 거의 정렬 시 O(n), Timsort의 핵심
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작