정렬: 버블 정렬과 퀵 정렬 레이스
지난 강의에서 말했죠, 이진 탐색의 입장권은 “먼저 정렬”이에요. 그럼 정렬 자체는 비쌀까요? 어떤 수법을 쓰느냐에 달렸죠. 오늘은 공개 레이스예요: 같은 뒤섞인 데이터로 버블 정렬과 퀵 정렬이 동시에 출발하고, 막대를 낮은 것부터 높은 것까지 먼저 맞춘 쪽이 이겨요. 작은 데이터부터 보고, 막대 60개로 올려 보세요—격차가 강렬하게 남을 거예요.
규칙: 레인 두 개, 같은 무작위 막대, 같은 애니메이션 박자(매 단계 소요 시간 동일)—공정한 시합이에요. 세 가지를 보세요: ①노랑 = 비교 중인 막대 ②보라 = 퀵 정렬이 고른 “피벗” ③초록 = 이미 자리 잡음. 먼저 10개로 리듬을 느끼고, 60개를 눌러 격차를 보세요.
🫧 버블 정렬
옆자리끼리 비교하고, 큰 쪽이 천천히 오른쪽으로 버블 · O(n²) 0회 비교⚡️ 퀵 정렬
피벗을 골라 반으로 가르고, 각자 또 가름 · 평균 O(n log n) 0회 비교🫧 버블: 무차별 대입으로 하나씩 바꾸기 O(n²)
매 라운드 처음부터 끝까지 한 번 훑고, 옆자리 둘 중 앞이 뒤보다 크면 바꿉니다—한 라운드가 끝나면 가장 큰 값은 반드시 맨 오른쪽으로 “버블”합니다. 단순하고 직관적이며 틀리기 어렵지만, n개의 수를 n라운드 훑으니 총합은 n²예요. 지지난 강의의 빨간 곡선이 바로 이 운명입니다.
⚡️ 퀵 정렬: 분할 정복 O(n log n)
아무 막대나 “피벗”으로 정하고, 그보다 짧은 건 왼쪽·긴 건 오른쪽으로 던집니다—한 패스가 끝나면 피벗은 자리에 앉고, 남은 두 무더기가 같은 동작을 반복합니다. “반으로 가르기”, 낯익죠? 이진 탐색의 친척이에요. 이 수법을 분할 정복이라 하고, 다다음 강의 재귀에서도 다시 등장합니다.
🪪 솔직히 말해: 아무도 정렬을 손수 짜지 않아요
실제 엔지니어링에서 정렬은 list.sort() 한 줄이고, 언어 내장 구현이 우리 손수 짠 것보다 낫습니다. 그럼 왜 배우나요? 두 가지 체감 때문이에요: 하나는 “어떤 코드는 왜 밤새 도는지” 읽기—대개 백만 급 데이터에 O(n²) 수법을 쓴 경우; 둘은 O(n²)와 O(n log n)이 얼마나 차이나는지 직접 느끼기—위 레이스가 지지난 강의 두 곡선의 실사판입니다. 자와 감이 있으면 AI가 쓴 코드를 검수할 배짱이 생깁니다.
이 강의가 전하고 싶은 것
- 정렬 사고의 두 큰 흐름: 무차별 대입으로 하나씩 바꾸기(버블) vs 분할 정복(퀵 정렬)
- “반으로 가르기”가 또 공을 세움: 퀵 정렬은 이진 탐색 사고의 친척이고, 분할 정복 수법은 뒤에서 재귀를 다룰 때 또 만나요
- 데이터가 크면 알고리즘 선택이 생사선: 막대 60개만으로도 눈에 보이고, 백만 건이면 “밤새 돌기”와 “1초 만에 결과”예요
- 손수 짤 필요는 없지만, 읽을 줄은 알아야 해요: .sort() 한 줄 뒤의 빠르고 느린 계산이 코드 검수의 기본기예요