시간복잡도: O(n²) 이유: 외부(n-1) × 내부(n-i-1) = 약 n²/2번 비교. 빅오에서 상수는 무시하므로 O(n²). n = 1,000이면 약 50만 번. n = 100,000이면 약 50억 번 — 느리다.
구현 2 — 최적화 버블 정렬 (조기 종료)
기본 버블 정렬의 문제: 이미 정렬된 배열 [1,2,3,4,5]도 n-1번 패스를 모두 수행한다. swapped 플래그를 추가하면, 교환이 한 번도 없었던 패스 → 이미 정렬 완료 → break로 즉시 종료할 수 있다.
python
defbubble_sort_optimized(arr): n = len(arr) for i inrange(n): swapped = False# 이 패스에서 교환 발생 여부for j inrange(n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True# 교환 발생 → 플래그 ONif not swapped: # 교환 없음 = 이미 정렬됨breakreturn arr
swapped 플래그 동작 원리
# 입력: [1, 2, 3, 4, 5] (이미 정렬됨)패스 1 (i=0): swapped = False 1 < 2 → 교환 없음 2 < 3 → 교환 없음 3 < 4 → 교환 없음 4 < 5 → 교환 없음 패스 끝 → swapped 여전히 False → if not swapped: break → 즉시 종료! 결과: 1패스만에 완료 → 시간복잡도 O(n)
🐌 일반 버블 정렬
[1,2,3,4,5] 입력 시 n-1 = 4패스 모두 수행 시간 O(n²)
⚡ 최적화 버블 정렬
[1,2,3,4,5] 입력 시 swap 없음 감지 → 1패스에 종료 최선 O(n)
⚠️
if not swapped:는 swapped가 False일 때 True다. 즉, "한 번도 교환이 일어나지 않았을 때" 실행 → break → 루프 탈출.