거품 정렬 (Bubble Sort)이란, 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘이다.
stable
sort이고, In-place
알고리즘이다.
🔖 Stable Sort (안정 정렬)
정렬을 했을 때 중복된 값들의 순서가 변하지 않는 정렬을 말한다.
🔖 In-place Algorithm
원소들의 개수에 비해서 충분히 무시할 만한 저장 공간만을 더 사용하는 알고리즘을 말한다.
즉, 추가적인 메모리 공간이 거의 안 드는 알고리즘이다.
오름차순 정렬일 경우 다음과 같다.
다음은 오름차순 정렬에 대한 구현 코드이다.
void bubbleSort(int[] arr) {
int temp = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 1 ; j < arr.length-i; j++) {
if(arr[j-1] > arr[j]) {
// swap(arr[j-1], arr[j])
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
}
최적화된 버블 소트
는 내부 loop에서 swap이 발생하지 않으면, 정렬이 완료된 것으로 보고 알고리즘을 멈춘다.void bubbleSort(int arr[], int n) {
int i, j, temp;
boolean swapped;
for (i = 0; i < n - 1; i++) {
swapped = false;
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// swap arr[j] and arr[j+1]
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true; // swap 발생
}
}
// swap이 발생하지 않았으면, break
if (swapped == false)
break;
}
}
항상 이다.
비교 횟수 :
교환 횟수 : 0 ~
Worst Case (반대로 정렬된 경우) :
비교 횟수 :
교환 횟수 :
Average Case :
Best Case (이미 정렬된 경우) :
비교 횟수 :
교환 횟수 :
버블 소트는 다른 자료구조 없이, 인접한 두 개의 값만 비교하여 교환하기 때문에 In-place 알고리즘이다.
Auxiliary Space (보조 공간) :
컴퓨터 그래픽스
에서, 거의 정렬된 배열에서 작은 오류(ex.두 요소의 교환)를 감지할 때 선형 복잡도로 수정할 수 있어 많이 사용된다.