1.2 정렬_버블정렬
2021. 5. 28. 15:05ㆍ알고리즘
728x90
버블정렬 : 가장 작은 값을 선택해서 제일앞으로 보내는 알고리즘(오름차순)
- 시간복잡도 : O(N^2)
- 직관적이고 구현하기 쉽지만 가장 효율성이 떨어지는 알고리즘
ex)
int[] arr = {1, 3, 4, 5, 6, 2, 8, 7}; - 오름차순 정렬
- (1, 3) 비교
- (3, 4) 비교
- (4, 5) 비교
- (5, 6) 비교
- (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 = { 1, 3, 4, 5, 6, 2, 8, 7 };
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 |