삽입 정렬(Insertion Sort)

2020. 7. 2. 10:42·자료구조

삽입 정렬(Insertion Sort)

  • 해당 순서의 배열 값을 기존의 배열에 올바른 위치를 찾아 삽입한다.
  • 2번째 배열의 값부터 앞쪽의 배열의 값들과 비교하여 삽입할 위치를 정한 후 나머지 값을 한칸씩 뒤로 옮기는 알고리즘이다.
  • 최선의 경우 O(N)이라는 빠른 효율성을 가지고 있다. 

장점

  • 구현하기 쉽다.
  • 정렬된 배열이라면 비교와 교환을 적게 하기 때문에 효율적일 수 있다.
  • 배열 안에서 교환방식으로 다른 메모리 공간을 필요로 하지 않는다. 

단점

  • 최악의 경우 많은 값들의 이동을 필요로한다.
  • 배열의 길이가 길고 비교할 값이 많다면 비효율적이다.

CODE

function insertionSort(arr) {
    var store = 0;
    for(var i=0; i<arr.length; i++) {
      store = arr[i]
      for(var j=i-1; j>-1 && arr[j]>store; j--) {
        arr[j+1] = arr[j]
      }
      arr[j+1] = store;
    }
    return arr
}

console.log(insertionSort([6,4,13,2,1]))

설명

function insertionSort(arr) {
    var store = 0;
    for(var i=0; i<arr.length; i++) {
      console.log(arr)
      console.log(`배열 ${i}번째 인덱스 탐색시작!!!`)
      console.log(" ")
      store = arr[i]
      for(var j=i-1; j>-1 && arr[j]>store; j--) {
        arr[j+1] = arr[j]
        console.log(`${i}번째 값 ${j}번째 위치로 삽입`)
        console.log(arr, i, j)
      }
      console.log("끝!!!")
      console.log(" ")
      arr[j+1] = store;
    }
    return arr
}

console.log(insertionSort([6,4,13,2,1]))
// console.log(insertionSort([1,2,3,4,5]))

// [ 6, 4, 13, 2, 1 ]
// 배열 0번째 인덱스 탐색시작!!!
// 끝!!!
// 
// [ 6, 4, 13, 2, 1 ]
// 배열 1번째 인덱스 탐색시작!!!
// 
// 1번째 값 0번째 위치로 삽입
// [ 6, 6, 13, 2, 1 ] 1 0
// 끝!!!
// 
// [ 4, 6, 13, 2, 1 ]
// 배열 2번째 인덱스 탐색시작!!!
// 끝!!!
// 
// [ 4, 6, 13, 2, 1 ]
// 배열 3번째 인덱스 탐색시작!!!
// 
// 3번째 값 2번째 위치로 삽입
// [ 4, 6, 13, 13, 1 ] 3 2
// 3번째 값 1번째 위치로 삽입
// [ 4, 6, 6, 13, 1 ] 3 1
// 3번째 값 0번째 위치로 삽입
// [ 4, 4, 6, 13, 1 ] 3 0
// 끝!!!
// 
// [ 2, 4, 6, 13, 1 ]
// 배열 4번째 인덱스 탐색시작!!!
// 
// 4번째 값 3번째 위치로 삽입
// [ 2, 4, 6, 13, 13 ] 4 3
// 4번째 값 2번째 위치로 삽입
// [ 2, 4, 6, 6, 13 ] 4 2
// 4번째 값 1번째 위치로 삽입
// [ 2, 4, 4, 6, 13 ] 4 1
// 4번째 값 0번째 위치로 삽입
// [ 2, 2, 4, 6, 13 ] 4 0
// 끝!!!
// 

// 결과!!!!
// [ 1, 2, 4, 6, 13 ]

 

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

병합 정렬(Merge Sort)  (0) 2020.07.07
빠른 정렬(Quick Sort)  (0) 2020.07.03
선택 정렬(Selection Sort)  (0) 2020.07.01
거품 정렬(Bubble Sort)  (0) 2020.07.01
검색(Search)  (0) 2020.06.30
'자료구조' 카테고리의 다른 글
  • 병합 정렬(Merge Sort)
  • 빠른 정렬(Quick Sort)
  • 선택 정렬(Selection Sort)
  • 거품 정렬(Bubble Sort)
꾸준2
꾸준2
  • 꾸준2
    꾸준2
    꾸준2
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • 복습 프로젝트 (3)
      • 어드민 프로젝트 (4)
      • 프로젝트 리팩토링 (4)
      • Database (0)
      • Java Library (2)
      • Java (4)
      • Java(JVM) (1)
      • 자바 문제 (13)
        • 이론 (6)
        • 실습 (7)
      • IDE (2)
        • IntelliJ (2)
      • 인강 (13)
        • SpringBoot(JPA활용1) (0)
        • 자바(기본편) (6)
        • 자바(중급1편) (3)
        • 자바(중급2편) (1)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (3)
      • Network (2)
      • Node (3)
      • CS (0)
      • amCharts4 (5)
      • 오류 모음 (4)
        • 리눅스 (1)
      • 기타지식 (2)
      • 자주 사용하는 기능 (4)
      • Vue (11)
      • Javascript (13)
      • Javascript-메서드 (3)
      • CSS (6)
      • 라이브러리 (4)
      • 자료구조 (11)
      • 알고리즘 (4)
      • Vue-프로젝트 (20)
      • Vue-bitcoin프로젝트 (6)
      • 블로그클론 프로젝트 (11)
      • 면접 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
꾸준2
삽입 정렬(Insertion Sort)
상단으로

티스토리툴바