- [JavaScript] 삽입정렬2025년 01월 11일
- KIMJAVAN
- 작성자
- 2025.01.11.:03
728x90삽입 정렬 (Insertion Sort)
삽입 정렬은 각 요소를 적절한 위치에 삽입하며 정렬하는 방식으로 동작하는 간단한 정렬 알고리즘입니다.
카드 게임에서 손에 들고 있는 카드를 정렬하는 방식과 비슷하다고 생각하면 됩니다.
동작 원리
- 배열의 두 번째 요소부터 시작합니다.
- 현재 요소를 이전 요소들과 비교하여, 적절한 위치에 삽입합니다.
- 이 과정을 배열 끝까지 반복하여 정렬을 완성합니다.
장단점
- 장점:
- 데이터가 거의 정렬되어 있는 경우 매우 빠르며, 최선의 경우 O(n)O(n)입니다.
- 추가 메모리를 사용하지 않는 **제자리 정렬 (In-Place Sort)**입니다.
- 단점:
- 데이터가 정렬되어 있지 않을 때는 비교와 이동이 많아져 O(n2)O(n^2)의 성능을 보입니다.
- 적합한 경우:
- 데이터 크기가 작거나, 이미 정렬에 가까운 데이터 정렬 시 적합합니다.
삽입 정렬 구현 (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(n2)O(n^2)
- 매번 삽입 위치를 찾기 위해 최대 nn번 비교해야 하기 때문.
한 줄 요약
삽입 정렬은 현재 값을 정렬된 부분의 올바른 위치에 삽입하는 정렬로, 작은 데이터셋에 효율적이고 구현이 간단합니다. 😊
'자바스크립트 > 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)