6강 / 20강

정렬 — 인기순 · 가격순 목록 만들기

같은 결과를 만드는 다섯 가지 방법, 그리고 어마어마한 비용 차이

정렬 — 인기순 · 가격순 목록 만들기
정렬은 그 자체로 목적이면서, 이진 탐색·집계·순위의 전제 조건이기도 합니다.

쇼핑몰 화면에서 손님이 가장 많이 누르는 버튼이 무엇일까요? "낮은 가격순", "인기순", "최신순" — 전부 정렬입니다.

그리고 5강에서 배운 이진 탐색도, 앞으로 배울 순위 집계도 전부 "정렬되어 있다"를 전제로 합니다. 정렬은 알고리즘 세계에서 가장 많이 쓰이는 도구예요.

느린 정렬 세 가지 — O(n²)

사람이 자연스럽게 떠올리는 방법들은 대부분 O(n²)입니다.

  • 버블 정렬 — 옆 사람과 비교해서 크면 자리를 바꾼다. 계속 반복.
  • 선택 정렬 — 남은 것 중 가장 작은 걸 골라 맨 앞에 놓는다.
  • 삽입 정렬 — 카드 게임처럼, 손에 든 카드를 알맞은 자리에 끼워 넣는다.
8개 정렬에 28번 비교. n이 커지면?
Python 브라우저에서 실행

빠른 정렬 두 가지 — O(n log n)

병합 정렬과 퀵 정렬은 완전히 다른 아이디어를 씁니다. 쪼개서 정복하기(분할 정복)예요.

  • 병합 정렬 — 반으로 쪼개고, 또 쪼개고, 하나가 되면 정렬하면서 합친다. 항상 O(n log n). 안정적.
  • 퀵 정렬 — 기준값(피벗) 하나를 잡고 작은 것은 왼쪽, 큰 것은 오른쪽으로 나눈 뒤 각각 다시 정렬. 보통 가장 빠르지만 최악에는 O(n²).
쪼개고 → 정렬하며 합치기. 이것이 분할 정복입니다.
Python 브라우저에서 실행

🎮 정렬 경주

다섯 가지 정렬을 같은 데이터로 돌려 봅시다. 막대가 움직이는 모양이 알고리즘마다 완전히 다릅니다. 개수를 12 → 60으로 늘리면서 비교 횟수가 어떻게 벌어지는지 보세요.

정렬 경주 — 다섯 알고리즘의 비교 횟수를 나란히
불러오는 중…

실제 비용 — 상품 3만 개를 정렬하면

알고리즘복잡도n = 30,000 일 때 비교 횟수
버블 · 선택 · 삽입O(n²)약 9억 번 💀
병합 · 퀵 · 파이썬 sortedO(n log n)약 45만 번

2,000배 차이입니다. 같은 결과를 만드는데요.

3,000개만으로도 이 정도 차이입니다. 30,000개면 100배 더 벌어져요.
Python 브라우저에서 실행
🤔 확인 문제
상품 30,000개를 버블 정렬로 정렬하면 비교 횟수는 대략?
🤔 확인 문제
병합 정렬과 퀵 정렬이 O(n²)보다 빠른 근본 이유는?
🤔 확인 문제
데이터를 한 번만 검색할 예정입니다. 정렬 후 이진 탐색과 그냥 선형 탐색 중 무엇이 유리할까요?