[알고리즘] 버블 정렬 [Bubble Sort]

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
반응형

댓글