• 티스토리 홈
  • 프로필사진
    KIMJAVAN
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
KIMJAVAN
  • 프로필사진
    KIMJAVAN
    • 개발 (168) N
      • 마크업 언어 (19)
        • HTML (7)
        • CSS (12)
      • 자바스크립트 (90) N
        • JavaScript (34)
        • JS Library (7)
        • React (15) N
        • threeJS (6)
        • TypeScript (2)
        • Next js (7) N
        • Node JS (18)
        • webGL (1)
      • AI (4)
        • chat-gpt (4)
      • flutter (17)
        • dart (11)
        • flutter (6)
      • Sql (3)
      • PHP (4)
      • Python (2)
      • Git (6) N
      • vscode (1)
      • 개발 도움 사이트 (7)
      • 작업기록 (1)
      • 오류 모음 (4) N
      • 메모장 (7)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [JavaScript] 삽입정렬
        2025년 01월 11일
        • KIMJAVAN
        • 작성자
        • 2025.01.11.:03
        728x90

        삽입 정렬 (Insertion Sort)

        삽입 정렬은 각 요소를 적절한 위치에 삽입하며 정렬하는 방식으로 동작하는 간단한 정렬 알고리즘입니다.
        카드 게임에서 손에 들고 있는 카드를 정렬하는 방식과 비슷하다고 생각하면 됩니다.


        동작 원리

        1. 배열의 두 번째 요소부터 시작합니다.
        2. 현재 요소를 이전 요소들과 비교하여, 적절한 위치에 삽입합니다.
        3. 이 과정을 배열 끝까지 반복하여 정렬을 완성합니다.

        장단점

        • 장점:
          • 데이터가 거의 정렬되어 있는 경우 매우 빠르며, 최선의 경우 O(n)O(n)O(n)입니다.
          • 추가 메모리를 사용하지 않는 **제자리 정렬 (In-Place Sort)**입니다.
        • 단점:
          • 데이터가 정렬되어 있지 않을 때는 비교와 이동이 많아져 O(n2)O(n^2)O(n2)의 성능을 보입니다.
        • 적합한 경우:
          • 데이터 크기가 작거나, 이미 정렬에 가까운 데이터 정렬 시 적합합니다.

        삽입 정렬 구현 (JavaScript)

        1. 오름차순 삽입 정렬

        const insertionSort = (array) => {
          const arr = array.slice(); // 원본 배열 복사
          const n = arr.length;
        
          for (let i = 1; i < n; i++) { // 두 번째 요소부터 시작
            let current = arr[i]; // 현재 정렬하려는 값
            let j = i - 1;
        
            // 현재 값이 이전 값보다 작으면 위치를 변경
            while (j >= 0 && arr[j] > current) {
              arr[j + 1] = arr[j]; // 값을 오른쪽으로 이동
              j--;
            }
            arr[j + 1] = current; // 올바른 위치에 삽입
          }
        
          return arr;
        };
        
        const an = [5, 1, 4, 2, 8];
        console.log(insertionSort(an)); // [1, 2, 4, 5, 8]

         

        2. 내림차순 삽입 정렬

        const insertionSortDesc = (array) => {
          const arr = array.slice();
          const n = arr.length;
        
          for (let i = 1; i < n; i++) {
            let current = arr[i];
            let j = i - 1;
        
            // 내림차순 정렬: 현재 값이 이전 값보다 크면 위치 변경
            while (j >= 0 && arr[j] < current) {
              arr[j + 1] = arr[j];
              j--;
            }
            arr[j + 1] = current;
          }
        
          return arr;
        };
        
        const an = [5, 1, 4, 2, 8];
        console.log(insertionSortDesc(an)); // [8, 5, 4, 2, 1]

         

        삽입 정렬 동작 예시

        배열: [5, 1, 4, 2, 8] (오름차순 정렬)

        1단계 (i = 1):

        • 현재 값: 1
        • 비교: 1 < 5 → 위치 변경
        • 결과: [1, 5, 4, 2, 8]

        2단계 (i = 2):

        • 현재 값: 4
        • 비교: 4 < 5 → 위치 변경
        • 결과: [1, 4, 5, 2, 8]

        3단계 (i = 3):

        • 현재 값: 2
        • 비교: 2 < 5 → 위치 변경
        • 비교: 2 < 4 → 위치 변경
        • 결과: [1, 2, 4, 5, 8]

        4단계 (i = 4):

        • 현재 값: 8
        • 비교: 8 > 5 → 그대로
        • 결과: [1, 2, 4, 5, 8]

        시간 복잡도

        • 최선의 경우 (정렬된 배열): O(n)O(n)O(n)
        • 평균/최악의 경우: O(n2)O(n^2)O(n2)
          • 매번 삽입 위치를 찾기 위해 최대 nnn번 비교해야 하기 때문.

         


        한 줄 요약

        삽입 정렬은 현재 값을 정렬된 부분의 올바른 위치에 삽입하는 정렬로, 작은 데이터셋에 효율적이고 구현이 간단합니다. 😊

        '자바스크립트 > JavaScript' 카테고리의 다른 글

        [JavaScript] 퀵 정렬  (3) 2025.01.11
        [JavaScript] 합병정렬  (0) 2025.01.11
        [JavaScript] 선택정렬  (0) 2025.01.11
        [JavaScript] 버블정렬  (0) 2025.01.11
        [JavaScript] bigO  (0) 2025.01.11
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바