Insertion sort (삽입 정렬)

2024. 9. 29. 15:51·Algorithm/내용 정리

 

❒ Description


삽입 정렬의 구현방법을 정리하자.

 

 

 

 

 

❒ Insertion sort 


1. 동작 방식

삽입 정렬은 target 값과 그 이전 요소들을 비교하면서, `target < 이전 요소` 인 경우에 swap하는 방식이다.  

 

2. 특징

  • 내부 정렬 : 추가적인 배열을 사용하지 않고 원래 배열 내에서 정렬이 이루어진다.
  • 안정 정렬 : 같은 값의 원소들 간의 순서가 보존된다.
  • 온라인 정렬 : 정렬 과정 중 새로운 데이터를 처리할 수 있다.

 

3. 장단점

  • 장점
    • 거의 정렬된 데이터에서 매우 효율적이다.
    • 적은 데이터에 적합하다.
    • 추가 메모리 사용이 없다.
  • 단점
    • 비효율적 : 대규모 데이터에서는 비효율적이다.
    • 데이터가 역순의로 정렬된 경우 성능이 저하된다.

 

4. 시간 복잡도

Best O(n)
Average O(n²)
Worst O(n²)

 

 

 

 

 

❒ Insertion sort 구현 


// int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

public int[] insertionSort(int[] nums) {
    for (int i = 1; i < nums.length; i++) {
        int target = nums[i];
        int beforeIdx = i - 1; // target 바로 이전 원소의 index
        while (beforeIdx >= 0 && target < nums[beforeIdx]) {
            // swap 진행
            nums[beforeIdx + 1] = nums[beforeIdx];
            nums[beforeIdx] = target;
            beforeIdx --;
        }
    }
    return nums;
}

 

※ 정렬 과정
int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

i = 1 ) [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
i = 2 ) [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
i = 3 ) [0, 5, 7, 9, 3, 1, 6, 2, 4, 8]
i = 4) [0, 3, 5, 7, 9, 1, 6, 2, 4, 8]
i = 5 ) [0, 1, 3, 5, 7, 9, 6, 2, 4, 8]
i = 6 ) [0, 1, 3, 5, 6, 7, 9, 2, 4, 8]
i = 7 ) [0, 1, 2, 3, 5, 6, 7, 9, 4, 8]
i = 8 ) [0, 1, 2, 3, 4, 5, 6, 7, 9, 8]
i = 9 ) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

 

 

 

 


'Algorithm > 내용 정리' 카테고리의 다른 글

Binary Search  (0) 2024.10.01
Dutch National Flag  (0) 2024.10.01
트리를 순회하는 방법들  (0) 2024.09.26
Height-Balanced(높이 균형) Binary Tree  (0) 2024.09.22
Dijkstra & Floyd-Warshall  (0) 2024.09.17
'Algorithm/내용 정리' 카테고리의 다른 글
  • Binary Search
  • Dutch National Flag
  • 트리를 순회하는 방법들
  • Height-Balanced(높이 균형) Binary Tree
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (207)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (6)
        • Java (3)
        • Kotlin (3)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (39)
        • 친절한 SQL 튜닝 (9)
        • 데이터 중심 애플리케이션 설계 (14)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • Spring Batch docs (10)
        • Quartz docs (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    부분단조성
    binarysearch
    오블완
    sliding-window
    Back-Tracking
    Two-Pointer
    greedy
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
Insertion sort (삽입 정렬)
상단으로

티스토리툴바