Algorithm

[Algorithm] 삽입정렬

by Donghwan 2021. 11. 26.

  • 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입합니다.
  • 앞쪽에 있는 원소들이 이미 정렬이 되어 있다고 판단하고 어떤 위치에 들어갈 지 판단하게 됩니다.
  • 첫 번째 위치는 이미 정렬되어 있다고 판단하고, 두 번째 위치부터 왼쪽으로 이동하면서 자신이 들어갈 위치를 찾습니다.
  • 오름차순인 경우는 왼쪽으로 이동하면서 자신보다 큰 값들과 위치를 바꾸고 작거나 같은 값이 나올 경우 탐색을 종료합니다.
  • 내림차순인 경우는 왼쪽으로 이동하면서 자신보다 작은 값들과 위치를 바꾸고 크거나 같은 값이 나올 경우 탐색을 종료합니다.
  • 선택정렬에 비해 구현 난이도가 높은 편이지만, 일반적으로 선택정렬보다 빠르게 동작합니다.
  • 최악의 경우 모든 경우의 수를 파악해야 하기 때문에 O(N^2)이 걸리지만, 최적의 경우엔 O(N)의 시간 복잡도를 가지게 됩니다.
  • 최악의 경우 : { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }
  • 최적의 경우 : { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
static void insertSort(int[] array) {
    for (int i = 1; i < array.length; i++) {
        for (int j = i; j > 0; j--) {
            if(array[j] < array[j-1]) {
                int temp = array[j];
                array[j] = array[j-1];
                array[j-1] = temp;
            } else {
                break;
            }
        }
    }

    for (int i : array) {
        System.out.print(i + " ");
    }
}

 


참고자료

  • 나동빈 - 이코테
728x90
반응형

'Algorithm' 카테고리의 다른 글

[Algorithm] 퀵정렬  (0) 2021.11.26
[Algorithm] 선택정렬  (0) 2021.11.26
[Algorithm] Vector  (0) 2021.10.06
[Algorithm] Stack  (0) 2021.09.21
[Algorithm] BOJ 1158  (0) 2021.07.28

댓글