선택한 원소의 앞이 정렬된 배열로 간주하고 그 배열에 원소를 삽입해 나아가는 정렬 알고리즘이다.
0 회전 : [ 8, 4, 10, 1 ] ◀ 초기 배열
- key = 4
- arr [0]은 이미 정렬되어 있다고 간주한다.
1 회전 : [ 4, 8, 10, 1 ]
- [ 8, 4, 10, 1 ] → [ 8, 8, 10, 1 ]
- [ 8, 8, 10, 1 ] → [ 8, 8, 10, 1 ]
2 회전 : [ 4, 8, 10, 1 ]
- [ 4, 8, 10, 1 ] → [ 4, 8, 10, 1 ]
3 회전 : [ 1, 4, 8, 10 ] ◀ 정렬 완료
- [ 4, 8, 10, 1 ] → [ 4, 8, 10, 10 ]
- [ 4, 8, 10, 10 ] → [ 4, 8, 8, 10 ]
- [ 4, 8, 8, 10 ] → [ 4, 4, 8, 10 ]
- [ 4, 4, 8, 10 ] → [ 1, 4, 8, 10 ]
Code
#include <stdio.h>
void insertSort(int arr[], int length) {
int j, temp;
for (int i = 1; i < length; i++) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j + 1] = arr[j];
}
// j = -1 or arr[j] <=arr[i]
arr[j + 1] = temp;
}
}
int main() {
// 변수선언
int arr[] = { 7, 5, 1, 2, 10, 8, 3 };
// 실행
//insertSort(arr, 7);
insertSort(arr, 7);
// 결과 출력
printf("정렬된 결과: [");
for (int i = 0; i < 7; i++) {
printf("%d ", arr[i]);
printf(" ");
}
printf("]");
return 0;
}
'알고리즘' 카테고리의 다른 글
stack (0) | 2023.04.28 |
---|---|
quick sort (0) | 2023.04.20 |
선택 정렬 알고리즘 (0) | 2023.04.11 |
버블정렬 (0) | 2023.04.07 |
재귀호출 (0) | 2023.04.04 |