3. 삽입 정렬(Insertion Sort)
2022. 1. 31. 14:51ㆍ프로그래머스
이번에는 삽입정렬에 대해 알아봅시다.
전에 알아본 두 가지 정렬 알고리즘인 선택정렬, 버블 정렬은 시간복잡도가 O(N^2) 로, 비효율적이었습니다.
문제는 동일합니다.
다음 숫자들을 오름차순으로 정렬하시오.
1 10 5 8 7 6 4 3 2 9
삽입 정렬은 각 숫자를 적절한 위치에 삽입하는 방식으로 문제를 해결합니다.
선택, 버블 정렬은 모든 원소를 돌면서 정렬은 했지만 삽입 정렬은 그렇지 않고 필요한 경우에만 위치를 바꿉니다.
소스코드
public class TestMain {
public static void main(String[] args) {
int[] array = {1,10,5,8,7,6,4,3,2,9};
for(int i=0;i<9;i++){
int j=i;
while(j>=0 && array[j]>array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
j--;
}
}
for(int i:array){
System.out.print(i+" ");
}
}
}
삽입 정렬의 특이한 점은 시간복잡도가 O(N^2)로 비효율적이지만,
정렬이 어느정도 완료된 배열에서는 아주 빠른 모습을 보인다는 것입니다. 정렬이 완벽하게 된 배열에서는 O(1) 까지도 가능합니다.
즉 거의 정렬이 완료된 배열에서는 어느 알고리즘보다도 빠르다는 특징을 가지고 있습니다.
다음 숫자 리스트를 오름차순으로 정렬해 봅시다.
1 2 4 5 6 7 8 9 10 11 12 13 14 15 3
이 경우 거의 정렬이 완료가 되어있습니다.
이 경우 삽입 정렬이 앞에서 설명한 2개의 정렬 알고리즘보다 연산 횟수가 월등히 적습니다.
'프로그래머스' 카테고리의 다른 글
5. 병합 정렬( merge sort) (0) | 2022.02.13 |
---|---|
4. 퀵 정렬 (Quick Sort) (0) | 2022.02.01 |
2. 버블 정렬(Bubble Sort) (0) | 2022.01.31 |
1. 선택 정렬 (Selection Sort) (0) | 2022.01.31 |
프로그래머스 [k번째 수] - 42748 (0) | 2022.01.28 |