728x90
반응형

[알고리즘] 버블 정렬 [Bubble Sort]
버블 정렬은 가장 단순한 정렬 알고리즘 중 하나로, 인접한 두 원소를 비교하여 필요시 위치를 교환하는 방식으로 동작합니다.
이 과정을 배열이 정렬될 때까지 반복합니다.
동작 원리
- 배열의 첫 번째 원소부터 시작하여 인접한 원소와 비교합니다.
- 현재 원소가 다음 원소보다 크다면 두 원소의 위치를 교환합니다.
- 배열의 끝까지 이 과정을 반복하면 가장 큰 원소가 배열의 끝으로 "버블링"됩니다.
- 이 전체 과정을 배열이 완전히 정렬될 때까지 반복합니다.

예시
function bubbleSort(arr){
var noSwaps;
for(var i = arr.length; i > 0; i--){
noSwaps = true;
for(var j = 0; j < i - 1; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
noSwaps = false;
}
}
// 최적화를 위해 이전 루프에서
// 교환이 이루어지지 않았다면
// 루프 멈춰
if(noSwaps) break;
}
return arr;
}
bubbleSort([8,1,2,3,4,5,6,7]);
// 다른 버전
function bubbleSort(arr){
var noSwaps;
for(var i = arr.length; i > 0; i--){
noSwaps = true;
for(var j = 0; j < i - 1; j++){
if(arr[j] > arr[j+1]){
// 이런식으로 ES6 방식 사용가능
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
noSwaps = false;
}
}
// 최적화를 위해 이전 루프에서
// 교환이 이루어지지 않았다면
// 루프 멈춰
if(noSwaps) break;
}
return arr;
}
시간 복잡도
- 최악의 경우: O(n^2)
- 최선의 경우: O(n) (이미 정렬된 배열)
- 평균: O(n^2)
공간 복잡도
- O(1) - 추가적인 메모리 공간을 거의 사용하지 않습니다.
장단점
장점
- 구현이 매우 간단하고 이해하기 쉽습니다.
- 추가 메모리 공간이 거의 필요하지 않습니다.
단점
- 대규모 데이터셋에 대해 비효율적입니다.
- 다른 정렬 알고리즘에 비해 일반적으로 성능이 떨어집니다.
최적화 방법
- 이미 정렬된 부분은 다시 검사하지 않도록 최적화할 수 있습니다.
- 한 패스에서 교환이 일어나지 않았다면 정렬이 완료된 것으로 간주하고 종료할 수 있습니다.
실제 사용 버블 정렬은 주로 교육 목적으로 사용되며, 실제 애플리케이션에서는 더 효율적인 정렬 알고리즘(예: 퀵 정렬, 병합 정렬)을 사용하는 것이 일반적입니다.
결론
버블 정렬은 간단하지만 비효율적인 정렬 알고리즘입니다.
그럼에도 불구하고, 알고리즘의 기본 개념을 이해하는 데 좋은 시작점이 될 수 있습니다.
참조!
https://www.udemy.com/course/best-javascript-data-structures/
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 삽입 정렬 [Insertion Sort] (0) | 2024.07.26 |
---|---|
[알고리즘] 선택 정렬 [Selection Sort] (0) | 2024.07.26 |
[알고리즘] 이진 검색 [Binary Search] (4) | 2024.07.24 |
[알고리즘] 핼퍼 메소드 재귀 (Helper Method Recursion) (0) | 2024.07.19 |
[알고리즘] 재귀 (Recursion) (0) | 2024.07.19 |
댓글