버블소트는 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘입니다.

인접한 2개의 원소를 비교해 크기가 순서대로 되어있지 않으면 서로 교환합니다. 선택정렬과 기본 개념이 유서하죠.

로직

private static void sort(int[] arr) {
        for (int i = 0; i < arr.length; i++) { // 1
            for (int j = 0; j < arr.length - i - 1; j++) { // 2
                if (arr[j] > arr[j + 1]) { // 3
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }

            System.out.print((i + 1) + "단계 : ");
            print(arr);
        }
    }

private static void print(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

// 단계별 결과.
1단계 : 6 2 4 3 7 1 9 
2단계 : 2 4 3 6 1 7 9 
3단계 : 2 3 4 1 6 7 9 
4단계 : 2 3 1 4 6 7 9 
5단계 : 2 1 3 4 6 7 9 
6단계 : 1 2 3 4 6 7 9 
7단계 : 1 2 3 4 6 7 9

시간 복잡도

(n-1) + n-2 + n-3 + ... +2 + 1이므로 n(n-1)/2로 insertion sort와 동일합니다. 즉 O(N^2)입니다.

정렬이 되어있건 말건 상관하지 않기에 최악, 최선, 평균 모두 O(N^2)의 시간복잡도를 가집니다.

공간복잡도

주어진 배열 안에서 교환을 통해 정렬이 수행되므로 O(N)입니다.

장점

단점