삽입 정렬(Insertion Sort) 이란?
- 각 숫자를 필요할 때만 적절한 위치에 삽입하는 방법
- 삽입 정렬은 ‘정렬이 되어있다고 가정’을 한다는 점에서 특정한 경우에 따라 아주 빠른 속도를 낼 수 있다.
삽입 정렬(Insertion Sort) 알고리즘의 특징
- 버블 정렬, 선택 정렬보다 빠르다.
- 특정한 경우에 따라 아주 빠른 속도를 낼 수 있다.
- 거의 정렬된 상태 에서는 어떤 알고리즘 보다도 빠르다는 특징을 가지고 있다.
삽입 정렬(Insertion Sort)의 알고리즘 예시
- 배열에 4 1 5 2 3 이 저장되어 있다고 가정하고 오름차순으로 정렬해 보자.
Source Code
#include <stdio.h>
int testcase = 5;
int main(){
// case 1
// int num[10] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
// case 2
int num[testcase] = {4, 1, 5, 2, 3};
// case 3 (Best Case)
// int num[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 1};
int i, j, r, tmp;
printf("***초기값***\nnum[0~4] : ");
for(r = 0; r < testcase; r++){
printf("%d ",num[r]);
}
printf("\n");
for(i=0; i< testcase-1 ; i++){
j = i;
while(num[j] > num[j+1]){
printf("[%d] 이동 num[%d]->num[%d] : ",num[j+1],j+1,j);
tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;
j--;
for(r = 0; r< testcase; r++){
printf("%d ",num[r]);
}
printf("\n");
}
}
return 0;
}
삽입 정렬(Insertion Sort)의 시간복잡도
- 삽입 정렬의 시간 복잡도는 O(N^2) 입니다.
- But, Best Case의 경우 시간 복잡도는 O(N) 입니다.
정렬 알고리즘 시간복잡도 비교
관련된 Post
References