Programing/Algorithm

삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제

2025. 5. 21. 08:41
반응형

삽입 정렬은 정렬이 되어 있는 부분에 데이터를 삽입하는 방식으로 동작하는 정렬 알고리즘입니다. 카드 게임에서 손에 카드를 한 장씩 끼워 넣으며 정렬하는 방식과 유사해 직관적으로 이해하기 쉽습니다.


1. 동작 원리

  1. 두 번째 요소부터 시작해서 현재 값을 임시 변수로 저장
  2. 그 앞에 있는 요소들과 비교해, 자신보다 큰 값은 한 칸씩 뒤로 이동
  3. 적절한 위치에 임시 값을 삽입
  4. 배열의 끝까지 반복

정렬된 부분을 점차 확장해나가는 구조입니다.


2. JavaScript 예제 - 오름차순 정렬

function insertionSort(arr) {
  for (let i = 1; i < arr.length; 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;
}

console.log(insertionSort([5, 2, 9, 1, 5, 6])); // [1, 2, 5, 5, 6, 9]
  • current: 삽입 대상 값
  • j: 정렬된 영역을 역방향으로 탐색하면서 위치를 찾음
  • 이동 후 적절한 위치에 삽입

3. 성능 분석

구분
시간 복잡도
최선의 경우 O(n)
평균 O(n^2)
최악의 경우 O(n^2)
  • 최선: 이미 정렬된 배열 (한 번도 이동하지 않음)
  • 공간 복잡도: O(1), 제자리 정렬 (in-place)
  • 안정 정렬(stable sort): 같은 값의 원래 순서 유지됨

4. 삽입 정렬의 특징

  • 정렬이 거의 완료된 데이터에 매우 빠름
  • 데이터 양이 적거나 정렬 상태가 좋을 때는 효율적
  • 코드가 간결하고 이해하기 쉬움

마무리

삽입 정렬은 단순하면서도 정렬 개념을 이해하기에 좋은 알고리즘입니다. 실제 정렬 라이브러리에서는 일부 구간을 삽입 정렬로 처리하기도 할 만큼, 상황에 따라 유용하게 사용될 수 있습니다.

완전히 정렬된 상태에 가까운 배열일수록 삽입 정렬의 장점이 극대화됩니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

선형 탐색 (Linear Search) 설명과 JavaScript 예제  (0) 2025.05.22
계수 정렬 (Counting Sort) 설명과 JavaScript 예제  (0) 2025.05.22
퀵 정렬 (Quick Sort) 설명과 JavaScript 예제  (1) 2025.05.22
병합 정렬 (Merge Sort) 설명과 JavaScript 예제  (1) 2025.05.21
선택 정렬 (Selection Sort) 설명과 JavaScript 예제  (1) 2025.05.21
버블 정렬 (Bubble Sort) 설명과 JavaScript 예제  (0) 2025.05.21
jvascript array 경우의 수 구하기 (permute)  (0) 2022.02.15
LRU Cache (Least Recently Used) / 프로그래머스 캐시  (0) 2022.01.19
'Programing/Algorithm' 카테고리의 다른 글
  • 퀵 정렬 (Quick Sort) 설명과 JavaScript 예제
  • 병합 정렬 (Merge Sort) 설명과 JavaScript 예제
  • 선택 정렬 (Selection Sort) 설명과 JavaScript 예제
  • 버블 정렬 (Bubble Sort) 설명과 JavaScript 예제
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (471) N
      • 금융 (61)
      • Programing (289) N
        • Algorithm (39)
        • API (2)
        • javascript (121)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
        • 보안 (5) N
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (35) N
        • 회고 (3)
        • 컬럼 (3) N
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    사고 싶은 책
    디자인패턴
    SQL
    자바
    IT 관련
    IT·컴퓨터
    Java
    자바스크립트
    위시리스트
    IT블로그
    php
    js패턴
    자바스크립트유틸
    기초
    읽고 싶은 책
    iT's MY LiFE
    jsp
    It
    JavaScript
    블로그
Dongkkase
삽입 정렬 (Insertion Sort) 설명과 JavaScript 예제
상단으로

티스토리툴바