Algorithm/개념 & 문법

[Algorithm] 삽입 정렬

ajeong7038 2024. 2. 27. 10:49

`이것이 코딩 테스트다 (나동빈)` 커리큘럼에 따라 진행합니다

 

✨ 삽입 정렬

정의

- 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입

- 선택 정렬에 비해 구현 난이도가 높은 편이지만, 일반적으로 더 효율적으로 동작한다.

- 앞쪽의 원소들이 이미 정리되어 있다고 가정하고 뒤쪽에 있는 원소를 적절한 위치에 삽입한다.

예시

import java.util.*;

public class Main {
	public static void main(String[] args) {
    	int n=10;
        int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
        for (int i=1; i<n; i++) {
        	for (int j=i; j>0; j--) {
	        	if (arr[j] < arr[j-1]) {
    	        	int temp = arr[j];
        	        arr[j] = arr[j-1];
            	    arr[j-1] = temp;
            	}
            	else break;
        	}
    	}
    	for (int i=0; i<n; i++) {
    		System.out.print(arr[i] + " ");
    	}
	}
}

시간 복잡도

- O(N^2)

- 현재 리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작

- 최선의 경우 (ex, 이미 정렬이 다 되어 있는 경우) O(N)의 시간 복잡도를 가진다

- 최악의 경우 : 오름차순으로 정렬되어 있는 수를 내림차순으로 바꾸는 경우 (하나도 정렬이 되어 있지 않은 경우)

'Algorithm > 개념 & 문법' 카테고리의 다른 글

[Algorithm] 계수 정렬  (1) 2024.02.27
[Algorithm] 퀵 정렬  (0) 2024.02.27
[Algorithm] 선택 정렬  (0) 2024.02.27
[Algorithm] DFS & BFS 알고리즘  (0) 2024.02.04
[Algorithm] 재귀 함수  (2) 2024.01.30