code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>

int arr[5] = {7,5,1,4,3};

int main(void)
{
int i=1, j=0, idx=0;

for(; i < 5; i++)
{
// 삽입할 숫자를 백업
idx = arr[i];

/* 백업한 숫자를 기준으로 이전에 있는 값들과 비교하여
idx 값이 arr[i-1]의 값보다 작을 때까지 반복
즉, 삽입할 수보다 큰 수들이 안 나올 때까지 반복한다.*/
// 삽입할 수는 백업해뒀기 때문에 덮어씌워져도 되므로
// 한칸씩 뒤로 미뤄 정렬한다.
for(j = i - 1; j >= 0 && arr[j] > idx; j--)
{
arr[j + 1] = arr[j];
}

/* 위의 for 문이 돌고나면 삽입할 숫자의 위치가 나왔으므로 해당 위치에 삽입
위의 for문이 끝날 때 j--이 수행된다는 점을 참고*/
arr[j+1] = idx;
}

for(int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
}