자료구조와 알고리즘/기초

버블 정렬(Bubble Sort)

binaryyoung 2020. 9. 14. 15:57

개념

버블 정렬은 바로 옆에 있는 값과 비교해서 우선 순위가 높은 값을 앞으로 보낸다.

예제

다음은 5개의 정수 배열 {5, 3, 4, 2, 1} 을 오름차순으로 버블 정렬하는 과정을 보여준다.

다음 그림과 같이 인접한 두 수를 비교하고 앞에 있는 수가 뒤에 있는 수보다 클 때 교환하는 과정을 반복하며 끝까지 진행하면 가장 큰 수인 5가 맨 뒤에 오게 된다. 이렇게 되면 첫 번째 순회가 끝난다. 그 이후에는 마지막 인덱스를 제외하면서 계속 순회하며 정렬하는 과정을 반복한다.

구현

class Sort {
	public static void bubbleSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = 0; j < arr.length - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(j, j + 1, arr);
                }
            }
        }
    }

    public static void swap(int idx1, int idx2, int[] arr) {
        int temp = arr[idx1];
        arr[idx1] = arr[idx2];
        arr[idx2] = temp;
    }
}

시간복잡도

N 개의 데이터를 버블 정렬한다면 연산횟수는 다음과 같다.

N + (N -1) + (N-2) + ... + 3 + 2 + 1

 

이를 등차수열의 합 공식으로 표현하면 다음과 같다.

(N + 1) * N /2

 

위 공식에서 최고차항을 제외하면 N^2 로

버블정렬은 O (N^2) 의 시간 복잡도를 가진다고 말할 수 있다.