삽입정렬
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입하는 방식입니다.
배열이 길어질수록 효율이 떨어지지만, 구현이 간단합니다.
시간복잡도는 O(n^2) 입니다.
삽입정렬 알고리즘
1. 두 번째 원소를 부분 리스트에서 적절한 위치에 삽입합니다.
2. 세 번째 원소를 부분 리스트에서 적절한 위치에 삽입합니다.
3. 위의 작업을 정렬이 끝날때까지 반복합니다.
삽입정렬 예제
25 를 앞의 리스트와 비교하여 적절한 위치에 삽입합니다.
31 25 12 22 11 25 31 12 22 11
12 를 앞의 리스트와 비교하여 적절한 위치에 삽입합니다.
25 31 12 22 11 12 25 31 22 11
22 를 앞의 리스트와 비교하여 적절한 위치에 삽입합니다.
12 25 31 22 11 12 22 25 31 11
11 을 앞의 리스트와 비교하여 적절한 위치에 삽입합니다.
12 22 25 31 11 11 12 22 25 31
삽입정렬 소스
#include <stdio.h> void insertion_sort ( int *data, int n ) { int i, j, remember; for ( i = 1; i < n; i++ ) { remember = data[(j=i)]; while ( --j >= 0 && remember < data[j] ){ data[j+1] = data[j]; data[j] = remember; } } } int main() { int i; int list[10] = {5, 3, 8, 4, 9, 1, 6, 2, 7}; insertion_sort(list, 10); for(i=0; i<10; i++){ printf("%d ", list[i]); } return 0; }
위키에 첨부된 소스에서 main 함수를 넣어 완성시킨 코드입니다.
'Computer Language > C' 카테고리의 다른 글
[C] 스택 개념, 함수, 코드 정리 (0) | 2018.11.08 |
---|---|
[C] 큐 개념, 종류 및 작동 방식, 코드 정리 (0) | 2018.11.08 |
[C] 선택정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] 버블정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] 퀵정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |