본문 바로가기

3. 알고리즘 공부

[422] 버블 정렬(Bubble Sort)

1. 버블 정렬 개념

맨 앞에서부터 맨 뒤까지 인접한 두 원소를 차례대로 비교합니다.

비교한 결과 더 큰 원소가 앞에 있을 경우, 비교한 두 원소의 자리를 바꿔줍니다.(제자리 정렬)

이 과정을 한 번 마치면 배열의 맨 뒤에는 가장 큰 원소가 위치합니다.

따라서 이 과정을 범위를 한 칸씩 줄여가며 계속해서 반복합니다.

2. 버블 정렬 예제

3. 버블 정렬 코드

nums = [5, 3, 4, 1, 2]

def bubble_sort(nums):
    for i in range(1, len(nums)):
        for j in range(len(nums)-i):
            if nums[j] > nums[j+1]:
                nums[j], nums[j+1] = nums[j+1], nums[j]

bubble_sort(nums)
print(nums)
# [1, 2, 3, 4, 5]

4. 버블 정렬 장점

버블 정렬은 매우 간단하고 이해하기 쉬운 정렬 알고리즘입니다.

게다가 코드 구현이 직관적이어서 초보자들이 배우기에 좋습니다.

추가 메모리 공간을 거의 사용하지 않기 때문에 메모리 사용이 제한적인 환경에서도 사용할 수 있습니다.

동일한 값을 가진 원소들의 상대적 위치가 변하지 않아 안정적인 정렬 알고리즘입니다.

5. 버블 정렬 단점

버블 정렬의 시간 복잡도는 최악과 평균 모두 O(n2)입니다.

원소의 개수가 많아지면 성능이 급격히 저하됩니다.

많은 비교와 교환이 필요하여 실제 실행 시간에서 더 비효율적입니다.

6. 정렬 알고리즘 시간 복잡도 비교

정렬 알고리즘 최악(Worst) 최선(Best) 평균(Average)
버블 정렬(Bubble Sort) O(n2) O(n2) O(n2)
선택 정렬(Selection Sort) O(n2) O(n2) O(n2)
삽입 정렬(Insertion Sort) O(n2) O(n) O(n2)
퀵 정렬(Quick Sort) O(n2) O(nlogn) O(nlogn)
병합 정렬(Merge Sort) O(nlogn) O(nlogn) O(nlogn)
힙 정렬(Heap Sort) O(nlogn) O(nlogn) O(nlogn)
기수 정렬(Radix Sort) O(n) O(n) O(n)
계수 정렬(Counting Sort) O(n) O(n) O(n)