버블 정렬(Bubble Sort)

Dion·2020년 3월 11일
2

알고리즘

목록 보기
6/7

버블 정렬이란?

버블 정렬은 요소의 앞뒤를 비교해가면서 정렬하는 정렬 알고리즘입니다. 전체를 한 번 돌때마다 정렬된 데이터가 1개씩 증가하게 됩니다. 그리고 버블 정렬의 가장 큰 특징이 있는데, 이미 정렬된 데이터의 경우 시간복잡도가 O(n)입니다.

이것이 중요한 이유는 대개의 데이터는 정렬이 되어있을 수도 있고, 정렬이 되지 않은 상태로 들어올 수 있는데 이 때, 선택정렬을 수행한다면, 항상 O(n2)의 시간이 소요되게 됩니다.

물론 버블 정렬의 시간 복잡도는 O(n2)이기 때문에 실전에선 사용되지 않습니다.

다만 선택 정렬과 마찬가지로, 여러 접근방법을 제시해주기 때문에 배우는 것이라고 생각하면 좋을 것 같습니다.

class BubbleSort {
    public void sort(int[] arr) {
        int length = arr.length;
        for (int i = 0; i < length - 1; i++) { // 마지막 요소는 비교할 필요 없음.
            for (int j = 0; j < length - j - 1; j++) { // 이미 정렬된 요소를 배제하기 위한 튜닝.
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

요약

버블 정렬의 경우도 학습용 정렬이지만, 버블 정렬의 특성인 이미 정렬된 요소의 경우 O(n)의 시간이 소요된다는 사실은 알아두어야 합니다. 의미는 없지만, 선택 정렬과 버블 정렬의 평균적인 속도 차이는 선택 정렬이 두 배 정도 빠르다는 사실도 알아두면 좋습니다. 참고

그 이유는 다를 경우 생기는 swap의 시간이 있기 때문입니다. (버블정렬은 바꾸는 경우가 굉장히 빈번합니다.)

profile
코드리뷰와 고양이를 좋아하는 개발자입니다. 좋은 글을 위한 비판은 언제든 환영합니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN