-
버블 정렬(Bubble Sort)알고리즘 2021. 12. 13. 20:56
특징
- '붙어있는 두 개의 데이터를 비교해서 크기가 순서대로가 아니면 바꾼다'는 아이디어에서 시작된 알고리즘입니다.
- 가장 앞에서 뒤로 비교-교환을 수행하면 큰 숫자가 오른쪽으로 이동하는 모습을 볼 수 있습니다. 이 모습이 수면 위로 거품이 올라오는 것과 흡사해서 버블(거품)정렬이라 불립니다.
- 선택 정렬과 마찬가지로 데이터를 비교-교환하며 정렬되기 때문에 비교 정렬로 분류됩니다.
효율
- 시간복잡도 - O(N2)
- 선택 정렬과 시간복잡도는 같지만, 실제 수행 시간이 더 깁니다. 이는 선택 정렬에 비해 교환(swap)이 더 자주 수행되기 때문입니다. 이때문에 정렬 알고리즘 중 가장 비효율적이라고 평가됩니다.
- 최선, 평균, 최악의 경우 모두 시간 복잡도가 동일합니다(무조건 2개의 데이터를 비교하므로).
- 공간복잡도 - O(N)
구현
function bubbleSort(input) { for (let i = 0; i < input.length - 1; i++) { let j = 1; while (j < input.length) { // 인접한 두 데이터가 순차적이지 않다면 교환(swap) if (input[j - 1] > input[j]) { let temp = input[j - 1]; input[j - 1] = input[j]; input[j] = temp; console.log(...input); } j++; } } } let sample = [7, 3, 2, 8, 9, 4, 6, 1, 5]; bubbleSort(sample); /* 정렬 과정 출력 3 7 2 8 9 4 6 1 5 3 2 7 8 9 4 6 1 5 3 2 7 8 4 9 6 1 5 3 2 7 8 4 6 9 1 5 3 2 7 8 4 6 1 9 5 3 2 7 8 4 6 1 5 9 2 3 7 8 4 6 1 5 9 2 3 7 4 8 6 1 5 9 2 3 7 4 6 8 1 5 9 2 3 7 4 6 1 8 5 9 2 3 7 4 6 1 5 8 9 2 3 4 7 6 1 5 8 9 2 3 4 6 7 1 5 8 9 2 3 4 6 1 7 5 8 9 2 3 4 6 1 5 7 8 9 2 3 4 1 6 5 7 8 9 2 3 4 1 5 6 7 8 9 2 3 1 4 5 6 7 8 9 2 1 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 */
구현은 선택 정렬보다 쉽지만 교환이 더 자주 수행되서 효율이 떨어져 보입니다.
'알고리즘' 카테고리의 다른 글
기수 정렬(Radix Sort) (0) 2021.12.15 병합 정렬(Merge Sort) (0) 2021.12.15 퀵 정렬(Quick Sort) (0) 2021.12.14 삽입 정렬(Insertion Sort) (0) 2021.12.13 선택 정렬(Selection Sort) (0) 2021.12.13