17강 / 20강

정렬 — 순서를 만드는 여러 가지 방법

같은 결과, 완전히 다른 속도

정렬 — 순서를 만드는 여러 가지 방법
정렬 알고리즘은 카드를 순서대로 놓는 여러 가지 방법입니다.

16강에서 정렬해 두면 찾기가 빨라진다는 걸 배웠습니다. 그럼 정렬은 어떻게 할까요? 방법이 아주 많고, 속도가 하늘과 땅 차이입니다.

카드 7장을 순서대로 놓는다고 상상하면서 읽어 보세요.

이름발상비교 횟수
버블 정렬옆 사람과 비교해 자리 바꾸기를 반복🐢 n²
선택 정렬남은 것 중 가장 작은 걸 골라 앞에 놓기🐢 n²
삽입 정렬카드를 한 장씩 알맞은 자리에 끼워 넣기🐢 n² (거의 정렬된 경우 ⚡ n)
병합 정렬반씩 쪼개서 정렬한 뒤 합치기⚡ n log n
퀵 정렬기준보다 작은 것/큰 것으로 가르기⚡ n log n (평균)
가장 단순하고 가장 느린 정렬 — 버블 정렬.
Python 브라우저에서 실행

🎮 정렬 애니메이션

다섯 가지 정렬이 막대를 어떻게 움직이는지 눈으로 보세요. 아래에 비교 횟수가 실시간으로 세어집니다. 개수를 늘려서 격차를 확인해 보세요.

정렬 경주 — 다섯 알고리즘의 움직임과 비교 횟수
불러오는 중…
한 회차마다 어떻게 바뀌는지 출력해 봅니다.
Python 브라우저에서 실행

병합 정렬 — 쪼개고, 정렬하고, 합친다

9강의 재귀가 여기서 빛납니다. 반으로 쪼개서 각각 정렬한 뒤, 정렬된 둘을 합치기. "각각 정렬"은 같은 문제니까 자기 자신을 부르면 되죠.

합치는 일은 쉽습니다 — 양쪽 맨 앞을 비교해 작은 걸 가져오면 되니까요.

쪼개지고 합쳐지는 과정을 들여쓰기로 봅니다.
Python 브라우저에서 실행
직접 재 보세요. 개수를 2배로 할 때 시간이 몇 배가 되는지가 핵심입니다.
Python 브라우저에서 실행
실전 정렬 — key 로 기준을 정합니다. 튜플을 주면 2순위 기준까지.
Python 브라우저에서 실행
🤔 확인 문제
버블 정렬에서 값의 개수가 2배가 되면 걸리는 시간은 대략?
🤔 확인 문제
병합 정렬의 핵심 발상은?
🤔 확인 문제
실무에서 정렬이 필요할 때 가장 올바른 선택은?