1.2 정렬_버블정렬

2021. 5. 28. 15:05알고리즘

728x90

버블정렬 : 가장 작은 값을 선택해서 제일앞으로 보내는 알고리즘(오름차순)

  • 시간복잡도 : O(N^2)
  • 직관적이고 구현하기 쉽지만 가장 효율성이 떨어지는 알고리즘

ex)

int[] arr = {1, 3, 4, 5, 6, 2, 8, 7}; - 오름차순 정렬

  1. (1, 3) 비교
  2. (3, 4) 비교
  3. (4, 5) 비교
  4. (5, 6) 비교
  5. (6, 2) 비교 -> (2, 6)

               .

               .

               .

               .

             반복

arr = {1, 2, 3, 4, 5, 6, 7, 8}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Blog {
 
    public static void main(String[] args) {
        int[] arr = { 13456287 };
        int temp;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1= temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.printf("%d", arr[i]);
        }
    }
}
cs
  • 각 회전 마다 최댓값이 결정 되므로, 정렬하는 배열의 길이는 매 회전마다 짧아진다.
  • for (int j = 0; j < arr.length - 1 - i; j++)
  • 버블정렬의 연산은 배열의 길이 N에 대히여 N * { ( N + 1 ) / 2 } 번 연산 하므로 시간복잡도는 O(N^2)이다.
  • 버블정렬의 시간 복잡도는 선책정렬과 같지만, 기대할수 있는 실제 수행 시간은 더 길다.
  • 매 회전 마다 연산 횟수가 훨씬 많기 때문

 

728x90

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

1.4 정렬 - 퀵 정렬 (Quick sort)  (0) 2021.05.31
1.3 정렬_삽입정렬  (0) 2021.05.28
1. 알고리즘 - 시간복잡도  (0) 2021.05.27
1.1 정렬_선택정렬  (0) 2021.05.27