성장일기
정렬 - 버블 정렬(bubble sort) 본문
1. 버블 정렬(Bubble Sort) 란?
🖐 인접한 데이터 두개를 비교해서, 앞에 있는 데이터가 뒤에 있는 데이터보다 크면 자리를 바꾸는 정렬 알고리즘
Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix) - VisuAlgo
VisuAlgo is free of charge for Computer Science community on earth. If you like VisuAlgo, the only "payment" that we ask of you is for you to tell the existence of VisuAlgo to other Computer Science students/instructors that you know =) via Facebook/Twitte
visualgo.net
▲ 눈으로 보기
2. 단순하게 생각하기
👉 데이터의 갯수보다 한 번 작게 비교
👉 앞의 데이터가 더 크다면 swap !
data = [4, 1]
for idx in range(len(data) - 1):
if data[idx] > data[idx+1]:
data[idx], data[idx+1] = data[idx+1], data[idx]
# 출력 결과: [1, 4]
👉 슈도코드
Bubble(a, N)
for i : N-1 -> 1
jor j : 0 -> i-1
if a[j] > a[j+1]
a[j] <-> a[j+1]
3. 알고리즘 구현
✍ n개의 리스트가 있는 경우 최대 n-1번 반복
✍ 한 번 반복할 때마다 뒤에서 하나씩 결정됨 ( 가장 큰 숫자 결정 -> 그 다음 큰 숫자 결정 -> ,,, )
✍ 만약 교환이 한번도 일어나지 않으면 다 정렬된 것 ( 더 이상 반복할 필요 X )
def bubble(data):
for t in range(len(data)-1):
swap = False
for idx in range(len(data) - t - 1): # 뒤에서 부터 숫자가 하나씩 결정되므로 t를 빼줌
if data[idx] > data[idx + 1]:
data[idx], data[idx + 1] = data[idx + 1], data[idx] # 스왑 !
swap = True
if swap == False: # 루프에서 스왑이 일어나지 않았다면 break!
break
return data
bubble([9, 7, 5, 3, 1])
# 출력 결과: [1, 3, 5, 7, 9]
4. 복잡도
👉 반복문이 두 개 O(n**2)
👉 완전 정렬되어 있는 상태라면 최선은 O(n) / 최악의 경우 n*(n-1) / 2
'알고리즘' 카테고리의 다른 글
정렬 - 병합 정렬(merge sort) (0) | 2022.02.09 |
---|---|
정렬 - 선택 정렬(selection sort) (0) | 2022.02.08 |
정렬 - 삽입 정렬(insertion sort) (0) | 2022.02.08 |
유클리드 호제법 (0) | 2022.01.14 |
정렬 알고리즘 종류 & 장단점 (0) | 2022.01.14 |