
버블 정렬은 이웃한 두 원소의 대소 관계를 비교하여 필요에 따라 교환을 반복하는 알고리즘으로, 단순 교환 정렬이라고도 한다.
마치 물속에서 거품이 천천히 위로 떠오르듯이, 가장 큰 값이 한 단계씩 맨 뒤로 이동하는 모습에서 ‘버블(Bubble)’이라는 이름이 붙었다고 한다.
버블 정렬의 핵심 동작은 다음과 같다.
초기 배열:
| 6 | 4 | 3 | 9 | 7 |
|---|
1번째 패스:
2번째 패스:
3번째 패스:
최종 정렬된 배열:
| 3 | 4 | 6 | 7 | 9 |
|---|
(n-1) + (n-2) + … + 1 = n(n-1)/2
따라서 시간 복잡도는 O(n²) 이다
장점
in-place 정렬이란?
- 배열 안에서 자리만 바꿔가며 정렬하는 것 = in-place
- 정렬할 때 새로운 배열이나 리스트를 따로 만들지 않는 것
단점
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 각 패스마다 교환이 발생했는지 체크
swapped = False
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
# 교환
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
# 만약 교환이 없었다면 이미 정렬된 상태
if not swapped:
break
return arr
# 사용 예시
arr = [6, 4, 3, 9, 7]
sorted_arr = bubble_sort(arr)
print(sorted_arr) # 출력: [3, 4, 6, 7, 9]