17강 / 20강
정렬 — 순서를 만드는 여러 가지 방법
같은 결과, 완전히 다른 속도
16강에서 정렬해 두면 찾기가 빨라진다는 걸 배웠습니다. 그럼 정렬은 어떻게 할까요? 방법이 아주 많고, 속도가 하늘과 땅 차이입니다.
카드 7장을 순서대로 놓는다고 상상하면서 읽어 보세요.
| 이름 | 발상 | 비교 횟수 |
|---|---|---|
| 버블 정렬 | 옆 사람과 비교해 자리 바꾸기를 반복 | 🐢 n² |
| 선택 정렬 | 남은 것 중 가장 작은 걸 골라 앞에 놓기 | 🐢 n² |
| 삽입 정렬 | 카드를 한 장씩 알맞은 자리에 끼워 넣기 | 🐢 n² (거의 정렬된 경우 ⚡ n) |
| 병합 정렬 | 반씩 쪼개서 정렬한 뒤 합치기 | ⚡ n log n |
| 퀵 정렬 | 기준보다 작은 것/큰 것으로 가르기 | ⚡ n log n (평균) |
가장 단순하고 가장 느린 정렬 — 버블 정렬.
Python
브라우저에서 실행
🎮 정렬 애니메이션
다섯 가지 정렬이 막대를 어떻게 움직이는지 눈으로 보세요. 아래에 비교 횟수가 실시간으로 세어집니다. 개수를 늘려서 격차를 확인해 보세요.
한 회차마다 어떻게 바뀌는지 출력해 봅니다.
Python
브라우저에서 실행
병합 정렬 — 쪼개고, 정렬하고, 합친다
9강의 재귀가 여기서 빛납니다. 반으로 쪼개서 각각 정렬한 뒤, 정렬된 둘을 합치기. "각각 정렬"은 같은 문제니까 자기 자신을 부르면 되죠.
합치는 일은 쉽습니다 — 양쪽 맨 앞을 비교해 작은 걸 가져오면 되니까요.
쪼개지고 합쳐지는 과정을 들여쓰기로 봅니다.
Python
브라우저에서 실행
직접 재 보세요. 개수를 2배로 할 때 시간이 몇 배가 되는지가 핵심입니다.
Python
브라우저에서 실행
실전 정렬 — key 로 기준을 정합니다. 튜플을 주면 2순위 기준까지.
Python
브라우저에서 실행
🤔 확인 문제
버블 정렬에서 값의 개수가 2배가 되면 걸리는 시간은 대략?
해설 버블 정렬은 n × n 번 비교합니다. n이 2배면 2×2 = 4배. 10배가 되면 100배 느려져요.
🤔 확인 문제
병합 정렬의 핵심 발상은?
해설 분할 정복입니다. "쪼갠 각각을 정렬"하는 일이 원래 문제와 같은 모양이라서 재귀로 풀려요 (9강).
🤔 확인 문제
실무에서 정렬이 필요할 때 가장 올바른 선택은?
해설
sorted()는 C로 만들어진 Timsort로, 직접 짠 어떤 파이썬 정렬보다 빠르고 안정적입니다. 알고리즘을 배우는 것과 실무에서 뭘 쓸지는 다른 문제예요.