버블소트는 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘입니다.
인접한 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)입니다.