*오름차순을 기준으로 정렬한다
배열에 8,5,6,2,4가 저장되어 있다고 가정하고 자료를 오름차순으로 정렬해 보자.
1회전 : 두번째 자료인 5를 Key로 해서 그 이전의 자료들과 비교한다.
- Key값 5와 첫번째 자료인 8을 비교한다. 8이 5보다 크므로 8을 5자리에 넣고 Key 값 5를 8의 자리인 첫번째에 기억시킨다.
2회전 : 세번째 자료인 6을 key값으로 해서 그 이전의 자료들과 비교한다.
- key값 6과 두번째 자료인 8을 비교한다. 8이 key값보다 크므로 8을 6이 있던 세번째 자리에 기억시킨다.
3회전 : 네번째 자료인 2를 key값으로 해서 그 이전의 자료들과 비교한다.
- key값 2와 세번째 자료인 8을 비교한다. 8이 key값보다 크므로 8을 2가 있던 네번째 자리에 기억시킨다.
4회전 : 다섯번째 자료인 4를 key값으로 해서 그 이전의 자료들과 비교한다.
- Key 값 4와 네 번째 자료인 8을 비교한다. 8이 Key 값보다 크므로 8을 다섯 번째 자리에 기억시킨다.
- Key 값 4와 세 번째 자료인 6을 비교한다. 6이 Key 값보다 크므로 6을 네 번째 자리에 기억시킨다.
- Key 값 4와 두 번째 자료인 5를 비교한다. 5가 Key 값보다 크므로 5를 세 번째 자리에 기억시킨다.
- Key 값 4와 첫 번째 자료인 2를 비교한다. 2가 Key 값보다 작으므로 4를 두 번째 자리에 기억시킨
#include <iostream>
using namespace std;
void insertion_sort(int list[], int size) {
int j;
//인덱스 0은 이미 정렬된 것으로 볼 수 있다.
for (int i = 1; i < size; i++) {
int key = list[i]; //현재 삽입될 숫자인 i번째 정수를 key 변수로 복사
//현재 정렬된 배열은 i-1까지 이므로 i-1번째부터 역순으로 조사한다.
//j 값은 음수가 아니여야 하고
//key 값 보다 정렬된 배열에 있는 값이 크면 j번째를 j+1번째로 이동
for (j = i - 1; j >= 0; j--) {
if (list[j] > key)
list[j + 1] = list[j]; //레코드의 오른쪽으로 이동
else
break;
}
list[j + 1] = key;
}
}
int main() {
int list[5] = { 8,5,6,2,4 };
insertion_sort(list, 5);
for (int i = 0; i < 5; i++) {
cout << list[i] << endl;
}
}