DSData StructuresPython learning path
0 / 12 완료
LESSON 05

정렬

데이터에 순서를 부여해 다음 작업을 더 단순하게 만드는 전처리

왜 정렬을 쓸까요?

정렬 자체가 목적일 때도 있지만, 탐색·중복 제거·두 포인터 같은 후속 작업을 빠르고 단순하게 만들기 위해 더 자주 씁니다. 비용을 한 번 지불하고 이후 연산의 구조를 바꾸는 선택입니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

영수증 날짜순 정리

지갑 속 영수증을 날짜순으로 늘어놓으면 지난주 지출만 골라 더하기 쉬워집니다.

자료구조와 연결하면한 번 순서를 만들면 이후의 검색과 집계가 단순해집니다.
현실 예시 2

달리기 기록 순위

완주한 순서가 아니라 기록이 빠른 순서로 참가자를 다시 배치해야 1등부터 바로 알 수 있습니다.

자료구조와 연결하면정렬 기준을 정하면 원하는 우선순위로 데이터를 볼 수 있습니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

랭킹·피드

점수, 시간, 우선순위가 여러 개인 데이터를 key 함수로 정렬합니다.

02

데이터 파이프라인

같은 키끼리 모아 병합·집계가 연속적으로 일어나게 합니다.

03

UI

가격 낮은 순, 최신 순처럼 사용자가 선택한 기준으로 결과를 보여줍니다.

04

전화번호부

이름순으로 정리해 사람이 원하는 연락처를 빠르게 훑어 찾게 합니다.

05

물류 출고

배송 마감 시각과 지역순으로 주문을 정렬해 묶음 작업을 단순하게 만듭니다.

어떤 원리로 동작하나요?

선택 정렬은 매 단계 최솟값을 골라 앞에 두며 O(n²)입니다. 실무에서는 파이썬의 안정적인 Timsort(sorted, list.sort)를 사용하며 일반적으로 O(n log n)입니다.

핵심 연산과 비용

연산Python 표현시간
내장 정렬sorted(items)O(n log n)
제자리 정렬items.sort()O(n log n)
최솟값 선택 n회selection sortO(n²)
정렬 후 병합two pointersO(n + m)
STEP BY STEP

선택 정렬 [3, 1, 2]

  1. 1
    i = 0[3, 1, 2]에서 최솟값 1 선택
  2. 2
    교환3과 1을 바꿔 [1, 3, 2]
  3. 3
    i = 1남은 [3, 2]에서 2 선택
  4. 4
    완료[1, 2, 3]

⚠ 자주 하는 실수

  • list.sort()는 리스트를 바꾸고 None을 반환합니다.
  • 문자열 숫자를 그대로 정렬하면 '10'이 '2'보다 앞설 수 있습니다.
  • 정렬로 원래 순서가 사라져도 되는지, 복사 비용이 허용되는지 확인합니다.