cat-1cat-2cat-3cat-4cat-5cat-6

알고리즘

버블정렬 알고리즘 분석하기 (JavaScript)

11:39

안녕하세요 NekoNynagYee입니다!!

이번에는 알고리즘을 공부하다보면 기초적으로 나오는 알고리즘 중 하나인 버블정렬 알고리즘에 대해서 알아보려합니다.

1. 버블정렬(Bubble Sort) 알고리즘이 뭔가요?


이름에서 알 수 있다시피 배열의 요소를 거품처럼 서로 비교하고 교환해가면서 정렬 하는 방식입니다.

즉, 서로 인접하는 두 요소를 비교후 오름차순이나 내림차순으로 정렬하는 방식입니다.

2. 기본 구조는 어떻게 생겼나요?


오름차순으로 정렬한다는 가정하에 두 인접하는 요소를 비교하여 더 큰 숫자가 한번에 한칸씩 뒤로 이동하는 구조입니다.

코드로 설명하자면 i번째 요소와 j번째 요소와 비교 했을 때 j번째 요소가 더 크면 j번째 요소를 한칸 뒤로 밀어서 그 다음 원소와 비교하고 계속 이 행동을 반복하여 하나의 정렬된 배열을 완성시키는 것입니다.

function bubbleSort(list) {
  for (let i = 0; i < list.length; i++) {
    for (let j = 1; j < list.length - i; j++) {
      if (list[j - 1] > list[j]) {
        [list[j - 1], list[j]] = [list[j], list[j - 1]];
      }
    }
  }
  return list;
}
 
console.log(bubbleSort([1, 6, 2, 7, 4, 3, 8, 5]));

위에는 제가 짠 알고리즘 코드입니다. 사람들마다 조금씩 방식이 다르겠지만 아마 대부분 전체적인 구조는 비슷 할 것으로 예상됩니다.

이렇게 봐서 이해하기 힘드실 수도 있으니 밑에 동작 과정을 적어보겠습니다.

// 1. i = 0, j = 1 ===> [1, 6, 2, 7, 4, 3, 8, 5]
// 2. i = 0, j = 2 ===> [1, 2, 6, 7, 4, 3, 8, 5]
// 3. i = 0, j = 3 ===> [1, 2, 6, 7, 4, 3, 8, 5]
// 4. i = 0, j = 4 ===> [1, 2, 6, 4, 7, 3, 8, 5]
// 5. i = 0, j = 5 ===> [1, 2, 6, 4, 3, 7, 8, 5]
// 6. i = 0, j = 6 ===> [1, 2, 6, 4, 3, 7, 8, 5]
// 7. i = 0, j = 7 ===> [1, 2, 6, 4, 3, 7, 5, 8]
 
// 8. i = 1, j = 1 ===> [1, 2, 6, 4, 3, 7, 5, 8]
// 9. i = 1, j = 2 ===> [1, 2, 6, 4, 3, 7, 5, 8]
//10. i = 1, j = 3 ===> [1, 2, 4, 6, 3, 7, 5, 8]
//11. i = 1, j = 4 ===> [1, 2, 4, 3, 6, 7, 5, 8]
//12. i = 1, j = 5 ===> [1, 2, 4, 3, 6, 7, 5, 8]
//13. i = 1, j = 6 ===> [1, 2, 4, 3, 6, 5, 7, 8]
 
//14. i = 2, j = 1 ===> [1, 2, 4, 3, 6, 5, 7, 8]
//15. i = 2, j = 2 ===> [1, 2, 4, 3, 6, 5, 7, 8]
//16. i = 2, j = 3 ===> [1, 2, 3, 4, 6, 5, 7, 8]
//17. i = 2, j = 4 ===> [1, 2, 3, 4, 6, 5, 7, 8]
//18. i = 2, j = 5 ===> [1, 2, 3, 4, 5, 6, 7, 8]

해석 방법은 i가 0이고 j에 0을 대입해서 코드가 어떻게 동작하는지를 보는겁니다.

3. 버블 정렬의 시간 복잡도는요?


일단 제 코드를 지피티 선생님께 물어보니 시간복잡도가 O(N^2)가 나옵니다. 혹시나 해서 찾아보니 대부분이 저렇게 나오는거 같습니다. 시간복잡도에 관해서는 다음에 다뤄보도록 하겠습니다.

(Javascript) 재귀함수에 대해 알아보기다음 포스트

(Javascript) 재귀함수에 대해 알아보기

알고리즘에 자주 등장하는 재귀함수에 대해 알아봅니다.
JavaScript 렉시컬 스코프 알아보기이전 포스트

JavaScript 렉시컬 스코프 알아보기

JavaScript의 핵심 렉시컬 스코프에 대해 설명합니다.