프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • nomadcoders
  • 코드스테이츠
  • 자바스크립트
  • 국비지원
  • 내일배움카드
  • 내일배움단
  • 모던자바스크립트딥다이브
  • 2023 인프콘 후기
  • JavaScript
  • nomadcoder
  • 투포인터알고리즘
  • 자바스크립트알고리즘
  • Til
  • 스파르타코딩클럽
  • 자바스크립트비트마스크
  • 비트마스크
  • 코딩프로젝트
  • vanilaJS
  • MySQL
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

[알고리즘 JS] 버블 정렬 알고리즘 : Bubble Sort Algorithm
Algorithm & 자료구조/자료구조

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

2022. 8. 31. 16:02

버블 정렬 알고리즘이란?

  • 아래 그림의 주황색 부분 처럼, 인접한 두 개의 요소의 대소를 비교해 자리를 바꿔 정렬을 하는 알고리즘이다.
  • 바깥쪽 반복과 안쪽 반복이 있을 때 바깥 반복을 배열의 길이만큼 반복하고, 안쪽 반복에서는 j로 0번째 인덱스부터 마지막요소를 제외한 범위만큼 반복하면서, 배열의 j번째 요소와 j + 1번째 요소의 대소를 비교한다. j + 1번째 요소와 비교되기 때문에 배열의 마지막 요소는 범위에 추가를 하지 않아도 저절로 반복이 된다. 

출처 : https://technologystrive.com/bubble-sort/

  • 위 그림처럼 정렬이 완료된 범위의 마지막 부분은 정렬 범위에서 제외시켜 주어도 되는데, 그렇게 하기 위해서 i 가 증가할 때마다 j의 범위에서 i만큼 감소시켜준다. 

버블 정렬 알고리즘 코드 적용

const bubbleSort = function (arr) {
  for (let i = 0; i < arr.length - 1; i++) {
  // 매 반복마다 j 의 범위를 i 만큼 줄여나간다. (이미 정렬된 부분이기 때문에.)
    for (let j = 0; j < arr.length - i - 1; j++) {
    // 대소 비교를 하여 j 요소가 더 클 경우 swap 한다.
      if (arr[j] > arr[j + 1]) {
        let tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
      }
    }
  }
  return arr;
};

버블 정렬 알고리즘 최적화

  • 기존 방식의 버블 정렬은 정렬이 완료가 된 시점이어도 반복을 계속 하기 때문에 그리 효율적이지 못하다. 따라서 이미 정렬이 완료된 시점이 될 경우, 즉 swap이 한번도 일어나지 않은 경우 정렬 알고리즘을 중단할 수 있다.
  • 코드는 아래와 같다.
const bubbleSortOptimized = arr => {
  const N = arr.length;
  // 전체 길이만큼 i 를 반복한다.
  for (let i = 0; i < N; i++) {
    // swap 여부를 확인하기 위해 swap 변수에 false를 할당해준다.
    let swap = false;

    // 기존 버블 정렬과 동일하게 범위를 N에서 i 와 -1 만큼을 빼면서 j를 반복한다.
    for (let j = 0; j < N - i - 1; j++) {
      // 오름차순 정렬일 때, j가 j + 1 보다 작으면 위치를 바꾼다(swap)
      if (arr[j] > arr[j + 1]) {
        let tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
        // swap 변수를 true 로 재할당한다.
        swap = true;
      }
    }

    // 만약 swap 이 일어나지 않아서, 여전히 swap 이 false 인 경우 반복문을 탈출한다.
    if (!swap) break;
  }

  return arr;
};

 

저작자표시 (새창열림)

'Algorithm & 자료구조 > 자료구조' 카테고리의 다른 글

[알고리즘 JS] 퀵정렬 알고리즘 : Quick Sort Algorithm  (0) 2022.10.11
[알고리즘 JS] 삽입 정렬 알고리즘 : Insertion Sort Algorithm  (0) 2022.10.01
[알고리즘 JS] 이진 검색 알고리즘 : Binary Search Algorithm  (0) 2022.07.26
[알고리즘 JS] 선택 정렬 알고리즘 : Selection Sort Algorithm  (0) 2022.07.22
    'Algorithm & 자료구조/자료구조' 카테고리의 다른 글
    • [알고리즘 JS] 퀵정렬 알고리즘 : Quick Sort Algorithm
    • [알고리즘 JS] 삽입 정렬 알고리즘 : Insertion Sort Algorithm
    • [알고리즘 JS] 이진 검색 알고리즘 : Binary Search Algorithm
    • [알고리즘 JS] 선택 정렬 알고리즘 : Selection Sort Algorithm
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바