거품 정렬(Bubble Sort)이란?
2023. 3. 15. 16:48ㆍCS
728x90
거품 정렬(Bubble Sort)은 인접한 두 원소의 대소 관계를 비교하여
작은 값의 원소를 앞으로, 큰 값의 원소를 뒤로 교환하면서 정렬하는 알고리즘이다.
자료구조와 알고리즘을 공부해본 사람이라면 알겠지만, 가장 먼저 배우는 정렬 기법이기도 하다.
왜냐하면 이 알고리즘은 구현하기도, 이해하기에도 정말 쉽다는 게 장점이다.
하지만 으레 모든 방법이 장점이 있다면, 그에 수반하는 단점도 있는 법.
거품 정렬은 비교와 교환을 반복하면서 시간 복잡도가 O(n^2)으로 비효율적이며
정렬된 데이터에 대해서도 비교를 계속 하므로 최선의 경우에도 O(n^2)의 시간복잡도를 가지게 된다.
아래는 자바로 구현한 거품 정렬이다.
public static void main(String[] args) {
int[] arr = {12, 7, 8, 3, 2, 77};
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void bubbleSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
먼저 배열의 길이를 len 으로 지정한 후,
첫 번째 반복문에서는 정렬할 배열의 모든 원소를 비교하며 반복한다.
두 번째 반복문에서는 인접한 두 원소의 대소를 비교하며,
앞의 값이 뒤의 값보다 크면 두 원소의 위치를 바꿔준다.
거품 정렬의 공간복잡도는 O(1)이다.
하지만, 시간복잡도는 최악의 경우 O(n^2)이며,
이는 정렬하려는 배열이 이미 정렬되어 있을 경우에도 적용된다.
따라서, 거품 정렬은 정렬할 데이터가 적은 경우나 이미 정렬된 데이터를 정렬할 때 사용하는 것이 적합하다.
거품 정렬의 장점은 구현이 간단하다는 것입니다.
하지만, 정렬 속도가 느리기 때문에 데이터가 많거나 정렬할 데이터가 이미 정렬되어 있을 경우에는 다른 정렬 알고리즘을 사용하는 것이 좋다.
728x90
'CS' 카테고리의 다른 글
HTTP GET vs POST? (0) | 2023.03.17 |
---|---|
트랜잭션의 연산 중 ROLLBACK 이란? (0) | 2023.03.16 |
프록시란(proxy)? (0) | 2023.03.14 |
가상 메모리란? (0) | 2023.03.11 |
Q. 로깅을 이용한 데이터베이스의 회복에 대해서 간략히 설명해주세요 (0) | 2023.03.09 |