오름차순 기준(왼쪽 요소의 값 < 오른쪽 요소의 값)
※ 수행하는 패스의 횟수는 n-1회이다. 그 이유는 패스를 수행할 때마다 마지막 요소는 이미 정렬된 상태기 때문에, 정렬할 요소가 하나씩 줄어들기 때문이다.
void bubbleSort(int[] arr) {
for(int i=0; i<arr.length; i++) { // 1.
for(int j=1; j<arr.length-i; j++) { // 2.
if(arr[j-1] > arr[j]) { // 3.
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
}
j<arr.length-i
즉, 배열의 크기-정렬된 원소의 갯수가 된다./* 배열의 크기를 n으로 가정*/
for(int i=0; i<n; i++) {
for(int j=1; j<n-i; j++) {
if(arr[j-1] > arr[j]) {
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
바깥 루프 i | 안쪽 루프 j에서의 비교 횟수 |
---|---|
i=0 | n-1 |
i=1 | n-2 |
i=2 | n-3 |
... | ... |
i=(n-2) | 2 |
i=(n-1) | 1 |
총 비교 횟수 = 안쪽 루프 j에서의 비교 횟수의 합
(n-1) + (n-2) + (n-3) + ... + 2 + 1 = n(n-1)/2
∴ 시간복잡도 O(n^2)
원하는 순서로 이미 정렬되어 있는 경우(최선) → O(n)
10
20
30
40
50
역순으로 정렬되어 있는 경우(최악) → O(n^2)
50
40
30
20
10
40
30
20
10
50
=> n-1
30
20
10
40
50
=> n-2
20
10
30
40
50
=> ...
10
20
30
40
50
=> 1
📖 참고
- Bohyoh Shibata. (2020). Do it! 자료구조와 함께 배우는 알고리즘 입문 - 자바편(강민 옮김). 이지스퍼블리싱
- 거품 정렬 (Bubble Sort)