본문/내용
I. 서론
정렬 알고리즘은 컴퓨터 과학을 배우는 사람이라면 누구나 한 번쯤 깊이 고민하게 되는 주제이다. 그러나 나는 이 개념을 단순히 ‘데이터를 순서대로 나열하는 기술’로만 이해하지 않는다. 오히려 정렬은 무질서한 세상 속에서 질서를 만들어가는 하나의 사고방식이라고 느낀다. 처음 프로그래밍을 배웠을 때, 버블정렬이나 선택정렬 같은 알고리즘을 보며 그저 수학적인 규칙만 이해하려 했다. 하지만 직접 코드를 실행해 보고, 다양한 입력값을 바꾸어보는 과정에서 생각이 바뀌었다. 같은 알고리즘이라도 데이터의 상태, 즉 이미 정렬된 상태인지, 역순인지, 완전히 무작위인지에 따라 실행 속도와 효율이 극적으로 달라지는 것이다. 이 차이를 처음 체감했을 때 느꼈던 놀라움은 단순히 ‘성능의 문제’가 아니라 ‘맥락의 문제’였다.
한 번은 실습 과제에서 10,000개의 데이터를 퀵정렬로 정렬했는데, 거의 정렬된 데이터를 입력하자 오히려 실행 시간이 훨씬 느려졌다. 당시 나는 ‘퀵정렬은 빠르다’는 교과서의 문장을 그대로 믿고 있었기에, 결과를 이해할 수 없었다. 하지만 이후 알고 보니 pivot 선택이 잘못되어 O(n²)의 최악의 상황이 발생한 것…