프로그래밍 기초편 · 탐색과 정렬

정렬: 버블 정렬과 퀵 정렬 레이스

지난 강의에서 말했죠, 이진 탐색의 입장권은 “먼저 정렬”이에요. 그럼 정렬 자체는 비쌀까요? 어떤 수법을 쓰느냐에 달렸죠. 오늘은 공개 레이스예요: 같은 뒤섞인 데이터로 버블 정렬과 퀵 정렬이 동시에 출발하고, 막대를 낮은 것부터 높은 것까지 먼저 맞춘 쪽이 이겨요. 작은 데이터부터 보고, 막대 60개로 올려 보세요—격차가 강렬하게 남을 거예요.

맞대결 레이스 · 버블 vs 퀵 정렬

규칙: 레인 두 개, 같은 무작위 막대, 같은 애니메이션 박자(매 단계 소요 시간 동일)—공정한 시합이에요. 세 가지를 보세요: ①노랑 = 비교 중인 막대 ②보라 = 퀵 정렬이 고른 “피벗” ③초록 = 이미 자리 잡음. 먼저 10개로 리듬을 느끼고, 60개를 눌러 격차를 보세요.

막대 개수 두 레인이 같은 데이터를 씁니다. “출발”을 눌러 시작하세요

🫧 버블 정렬

옆자리끼리 비교하고, 큰 쪽이 천천히 오른쪽으로 버블 · O(n²) 0회 비교

⚡️ 퀵 정렬

피벗을 골라 반으로 가르고, 각자 또 가름 · 평균 O(n log n) 0회 비교
이 시합을 보는 법: 버블은 늘 옆자리만 비교하며 한 칸씩 옮기고, 퀵 정렬은 피벗을 고를 때마다 문제를 더 작은 두 문제로 가릅니다. 막대 10개면 양쪽이 비슷하고, 60개면 퀵 정렬의 비교 횟수는 버블의 잔여분에 가깝습니다.
두 가지 사고 · 각자 어떤 수법인가

🫧 버블: 무차별 대입으로 하나씩 바꾸기 O(n²)

매 라운드 처음부터 끝까지 한 번 훑고, 옆자리 둘 중 앞이 뒤보다 크면 바꿉니다—한 라운드가 끝나면 가장 큰 값은 반드시 맨 오른쪽으로 “버블”합니다. 단순하고 직관적이며 틀리기 어렵지만, n개의 수를 n라운드 훑으니 총합은 n²예요. 지지난 강의의 빨간 곡선이 바로 이 운명입니다.

⚡️ 퀵 정렬: 분할 정복 O(n log n)

아무 막대나 “피벗”으로 정하고, 그보다 짧은 건 왼쪽·긴 건 오른쪽으로 던집니다—한 패스가 끝나면 피벗은 자리에 앉고, 남은 두 무더기가 같은 동작을 반복합니다. “반으로 가르기”, 낯익죠? 이진 탐색의 친척이에요. 이 수법을 분할 정복이라 하고, 다다음 강의 재귀에서도 다시 등장합니다.

🪪 솔직히 말해: 아무도 정렬을 손수 짜지 않아요

실제 엔지니어링에서 정렬은 list.sort() 한 줄이고, 언어 내장 구현이 우리 손수 짠 것보다 낫습니다. 그럼 왜 배우나요? 두 가지 체감 때문이에요: 하나는 “어떤 코드는 왜 밤새 도는지” 읽기—대개 백만 급 데이터에 O(n²) 수법을 쓴 경우; 둘은 O(n²)와 O(n log n)이 얼마나 차이나는지 직접 느끼기—위 레이스가 지지난 강의 두 곡선의 실사판입니다. 자와 감이 있으면 AI가 쓴 코드를 검수할 배짱이 생깁니다.

다음 강의 예고:정렬은 AI 시대에 숨은 신분도 있어요. RAG가 후보 문단을 잔뜩 가져오면, 앞에 선 쪽이 컨텍스트에 들어갑니다—이 “점수 + 재정렬” 과정이 Rerank이고, LLM 엔지니어링 속 정렬 사고의 진짜 모습이에요. 다음 강의에서 Rerank 모델을 직접 해 봅니다.

이 강의가 전하고 싶은 것