Algorithm
버블 정렬 (Bubble Sort)
h34hg0
2022. 7. 18. 00:30
버블 정렬
버블 정렬이란?
인접한 두 원소의 크기를 비교하여 대소관계에 따라 위치를 교환하거나 교환하지 않음으로 오름차순이나 내림차순으로 데이터를 정렬하는 알고리즘이다.
예시
위의 배열을 버블정렬을 통해 오름차순으로 한번 정렬해 보자
인접한 두 값을 비교하여 큰 값이 왼쪽에 있다면 (큰 값, 작은 값) 두 개의 값의 위치를 서로 바꿔주고, 반대되는 경우 (작은 값, 큰 값) 자리를 바꾸지 않는다.
이 과정을 수행하면 배열에서 가장 큰 값이 배열의 가장 오른쪽에 위치하게 된다.
배열에 가장 큰 값인 5를 오른쪽에 옮겼던 과정을 다시 수행한다.
이때 5는 이미 제자리를 찾았으므로 비교대상에서 제외한다.
비교를 수행하여 배열에서 두 번째로 큰 값인 4가 5 다음에 위치하게 된다.
4와 5가 제자리를 찾았으므로 이 두 값을 제외한 값들을 비교하여 정렬한다.
정렬한 결과 뒤죽박죽이였던 배열의 값들이 아름답게 오름차순으로 정렬된 것을 볼 수 있다.
시간복잡도
n개의 값을 가지는 배열을 정렬한다고 가정했을 때, 가장 최악의 경우 비교 횟수는 (n - 1) + (n - 2) + (n - 3) + ....... + 1 가 된다.
1 부터 n - 1 까지의 합을 식으로 표현하면 위와 같다.
빅오 표기법으로 시간복잡도를 나타내면 최고차항이 n^2이므로 O(n^2) 이 된다.
코드 구현
# bubble_sort.py
# Time Complexity : O(n^2)
def bubble_sort(arr, result):
for i in range(len(arr)):
for j in range(len(arr) - 1 - i):
if result[j] > result[j+1]:
tmp = result[j]
result[j] = result[j + 1]
result[j + 1] = tmp
if __name__=="__main__":
number_list = list(map(int, input("Input Sequence : ").split()))
sort = number_list[:]
print("before :", number_list)
bubble_sort(number_list, sort)
print("after :", sort)
4 5 1 3 2를 입력하니 버블 정렬의 결과인 1 2 3 4 5가 출력되는 것을 볼 수 있다.