버블 정렬(Bubble Sort)
- 버블 정렬은 인접한 두 요소를 비교하여 필요한 경우 교환하며 리스트를 정렬하는 알고리즘
동작 원리
- 리스트의 처음부터 끝까지 인접한 두 요소를 반복적으로 비교한다.
- 앞의 요소가 뒤의 요소보다 크면 두 요소를 교환.
- 각 반복이 끝날 때마다 가장 큰 요소가 리스트의 끝에 위치하게 된다.
- 이 과정을 리스트 전체가 정렬될 때까지 반복.
단계별 구현
- 리스트의 마지막 요소부터 첫 번째 요소까지 역순으로 순회.
- 각 반복에서 리스트의 처음부터 현재 반복 요소까지 순회하여 인접한 두 요소를 비교하기.
- 만약 앞의 요소가 뒤의 요소보다 크다면 두 요소를 교환.
- 교환이 발생하지 않은 경우 리스트가 이미 정렬된 상태이므로 반복을 중단.
Python 파이썬 코드:
def bubbleSort(lst: list) -> list:
length = len(lst)
for last in range(length-1, 0, -1):
swapped = False # 교환 여부
for i in range(last):
# 인접한 두 요소를 비교하여 앞의 요소가 크면 교환
if(lst[i] > lst[i+1]):
lst[i], lst[i+1] = lst[i+1], lst[i]
swapped = True
# 교환이 발생하지 않았다면 -> 정렬된 상태
if not swapped:
break
return lst
def bubbleSort(lst: list) -> list:
length = len(lst)
for last in range(length-1, 0, -1):
swapped = False # 교환 여부
for i in range(last):
# 인접한 두 요소를 비교하여 앞의 요소가 크면 교환
if(lst[i] > lst[i+1]):
lst[i], lst[i+1] = lst[i+1], lst[i]
swapped = True
# 교환이 발생하지 않았다면 -> 정렬된 상태
if not swapped:
break
return lst
장단점
장점:
- 구현이 간단하고 직관적이다?.
단점:
- 시간 복잡도가 O(n^2)로, 큰 데이터셋에는 비효율적이다.
- 교환 횟수가 많아 다른 정렬 알고리즘보다 느릴 수 있다.
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 삽입 정렬 Insertion Sort (36) | 2024.06.22 |
---|---|
[알고리즘] 선택 정렬 Selection Sort (27) | 2024.06.19 |