킹의 개발일지

버블 정렬 본문

알고리즘

버블 정렬

k1ng 2022. 8. 12. 10:15

지난 포스팅에서 제일 작은 값을 선택해서 앞으로 보내는 선택 정렬을 알아 보았다. 이번에는 정렬 알고리즘들중 버블 정렬에 대해서 알아보도록 하자.

 

버블 정렬도 선택 정렬처럼 매우 직관적인 정렬 알고리즘이다.

 

버블정렬은 바로 옆 숫자와 비교해서 작은 숫자를 앞으로 보내주는것을 반복함으로써 정렬을 진행한다.

 

선택정렬은 앞에서부터 정렬이 진행 되는것과는 달리 버블 정렬은 뒤에서부터 정렬이 시작된다. 자리를 바꿔주면서 가장 큰 값이 제일 뒤로 쌓이는 모양이다.


버블 정렬의 동작 방법을 살펴보자.

2 10 5 7 8 3 6 1 4 9

1) 2와 10을 비교 했을 때, 2가 작으므로 이동은 일어나지 않는다.

 

2) 10과 5를 비교했을 때, 10이 더 크므로 5와 자리를 바꾼다.

 

2 5 10 7 8 3 6 1 4 9

 

3) 10과 7을 비교했을 때, 10이 더 크므로 7과 자리를 바꾼다.

 

2 5 7 10 8 3 6 1 4 9

 

4) 10과 8을 비교했을 때, 10이 더 크므로 8과 자리를 바꾼다.

 

2 5 7 10 8 3 6 1 4 9

...

 

이렇게 한 사이클이 끝나면 값이 제일 큰 10이 가장 뒤로 정렬되는 모습을 볼 수 있다.

 

2 5 7 8 3 6 1 4 9 10

 

버블 정렬의 과정에서 매 사이클 마다 가장 큰 값이 맨 뒤로 보내지게 된다.


다음은 자바로 구현 한 코드이다.

 

/**
 * 가장 비효율적인 정렬 알고리즘
 * O(N^2)
 */
public class 버블정렬 {
    public static void main(String[] args) {
        int i;
        int j;
        int temp = 0;
        int[] arr = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};

        for (i = 0; i < 10; i++) {

            // 정렬이 뒤에서부터 시작된다. 9인 이유는 j+1 인덱스를 접근하기 때문
            for (j = 0; j < 9 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

        for (int e : arr) {
            System.out.print(e + " ");
        }
    }
}

 

버블 정렬은 정렬 알고리즘 중에서 구현이 가장 간단하지만 가장 비효율적인 알고리즘이다.

 

버블 정렬도 선택 정렬과 동일하게 O(N^2)의 시간복잡도를 갖는다.

'알고리즘' 카테고리의 다른 글

백트래킹  (0) 2022.11.03
퀵 정렬  (0) 2022.08.12
삽입 정렬  (0) 2022.08.12
선택 정렬  (0) 2022.08.12
알고리즘 시작  (0) 2022.07.16