CS/알고리즘

삽입 정렬(insertion sort)

리져니 2021. 9. 9. 02:29

삽입 정렬(insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.

k번째 반복 후의 결과 배열은, 앞쪽 k + 1 항목이 정렬된 상태이다.

각 반복에서 정렬되지 않은 나머지 부분 중 첫 번째 항목은 제거되어 정확한 위치에 삽입된다. 그러므로 다음과 같은 결과가 된다.

배열이 길어질수록 효율이 떨어진다. 다만, 구현이 간단하다는 장점이 있다.

선택 정렬이나 거품 정렬과 같은 같은 O(n^2) 알고리즘에 비교하여 빠르며, 안정 정렬이고 in-place 알고리즘이다.

 

삽입 정렬의 시각화

 

 

<구현>

import java.util.*;

public class Main {
    public static int[] solution(int n, int[] arr){
        for(int i=1;i<n;i++){
            int target = arr[i], j;
            for(j=i-1;j>=0;j--){
                if(arr[j]>target) arr[j+1] = arr[j];
                else break;
            }
            arr[j+1] = target;
        }
        return arr;
    }

    public static void main(String[] args) {
      Scanner kb = new Scanner(System.in);
      int n = kb.nextInt();
      int[] arr = new int[n];

      for(int i=0;i<n;i++){
          arr[i] = kb.nextInt();
      }
      for(int e : solution(n,arr)){
          System.out.print(e + " ");
      }
    }
}

 

 

<설명>

728x90

'CS > 알고리즘' 카테고리의 다른 글

너비 우선 탐색(Breadth-first search, BFS)  (0) 2021.09.15
깊이 우선 탐색(depth-first search, DFS)  (0) 2021.09.15
이진 검색(binary search)  (0) 2021.09.10
선택 정렬(selection sort)  (0) 2021.09.08
버블 정렬 (bubble sort)  (0) 2021.07.05