프라이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)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

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

프라이Develog(❁´◡`❁)

[알고리즘 JS] 삽입 정렬 알고리즘 : Insertion Sort Algorithm
Algorithm & 자료구조/자료구조

[알고리즘 JS] 삽입 정렬 알고리즘 : Insertion Sort Algorithm

2022. 10. 1. 22:33

삽입 정렬 알고리즘이란?

요소가 들어있는 배열을 i 로 반복할 때, 현재 i 위치 좌측으로 이미 요소가 정렬된 상태이고, i 값과 좌측의 값들을 비교해 i의 적절한 위치를 찾아 삽입하는 정렬 알고리즘이다. 

삽입 정렬 알고리즘 코드 적용

const nums = [11, 7, 5, 6, 10, 9];

function insertionSort(nums) {
  let N = nums.length;

  for (let i = 1; i < N; i++) {
    // i는 언제나 1번째부터 시작하고, temp 변수에 i의 현재 값을 보관한다.
    let temp = nums[i];
    // j는 언제나 i - 1의 위치에서 시작한다.
    let j = i - 1;
    // 만약에 j 가 0 이상이고, i위치의 값보다 j위치의 값이 더 큰 상태라면
    // 즉 temp가 좌측에 있는 요소보다 작다면 올바를 위치를 찾을 때까지 반복문을 돌려준다.
    while (j >= 0 && nums[j] > temp) {
      // j의 바로 다음 위치에 이전 j 값을 담아주면서 칸을 한 칸씩 우측으로 이동시키고,
      // j는 좌측으로 계속 이동시킨다.
      nums[j + 1] = nums[j];
      j--;
    }
    // 조건문을 벗어난 경우 최종적으로 temp의 위치가 확정되므로 j + 1의 위치에 temp를 삽입한다.
    // j + 1인 이유는
    // 1. j가 while문을 거치면서 계속 감소했기 때문이고
    // 2. 만약 현재 잘 정렬이 된 상태라 while문에 진입하지 않았다면 현재 i의 자리에 temp가 들어간다. 즉 움직이지 않는다는 것.
    nums[j + 1] = temp;
    console.log(i, '회전: ', nums);
  }

  return nums;
}

const result1 = insertionSort(nums);
console.log(result1);

역으로 정렬이 되어있는 최악의 경우 O(n^2) 의 시간복잡도를 갖지만, 이미 대부분 정렬이 완료된 경우 비교 횟수가 적기 때문에 효율적이다. 

저작자표시 (새창열림)

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

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

    티스토리툴바