삽입 정렬은 간단하면서도 효율적인 정렬 알고리즘 중 하나로, 주로 데이터 양이 적거나 거의 정렬된 경우에 적합하다. 삽입 정렬은 배열의 요소를 하나씩 순회하며, 현재 요소를 정렬된 부분에 적절한 위치에 삽입하는 방식으로 동작한다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 10
#define SWAP(x, y, t) ( (t)=(x), (x)=(y), (y)=(t) )
int list[MAX_SIZE];
int n;
void insertion_sort(int list[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = list[i];
for (j = i - 1; j >= 0 && list[j] > key; j--)
list[j + 1] = list[j]; // 레코드의 오른쪽 이동
list[j + 1] = key;
}
}
int main(void) {
int i;
n = MAX_SIZE;
srand(time(NULL));
for (i = 0; i < n; i++)
list[i] = rand() % 100;
insertion_sort(list, n);
for (i = 0; i < n; i++)
printf("%d ", list[i]);
printf("\n");
return 0;
}
제자리 정렬로 추가적인 메모리가 거의 필요하지 않기에 O(1)이다.
출처
C언어로 쉽게 풀어쓴 자료구조 - 천인구