삽입 정렬 (Insertion Sort)
이번에는 반복 알고리즘 중에 삽입 정렬 알고리즘을 알아봅시다.
삽입 정렬 알고리즘은 점진적으로 정렬 범위를 넓혀 나가는 방식으로 정렬하는 알고리즘입니다. 이를 위해 새로운 범위에 포함하는 마지막 원소를 앞으로 이동하면서 자신보다 작은 요소를 찾을 때까지 이동하면서 자리를 교환합니다.
삽입 정렬(base:컬렉션, n:원소 개수, compare:비교 논리)
반복(i:=1; i<n ; i:= i+1)
반복(j=i; j>0 ; j:=j-1)
조건(compare (base [j-1], base [j]) < 0)
temp: = base [j-1]
base[j-1] = base [j]
base[j] = temp
아니면
루프 탈출
삽입정렬
//삽입 정렬(Insertion Sort)
#include <stdio.h>
#define SWAP(a,b) {int t; t = a; a=b; b=t;}//a와 b를 교환
void InsertionSort(int *base, int n);
int main(void)
{
int arr[10] = { 9,4,3,10,5,8,7,6,2,1 };
InsertionSort(arr, 10);
return 0;
}
void ViewArr(int *arr, int n);
void InsertionSort(int *base, int n)
{
int i, j;
ViewArr(base, n);//현재 상태 출력
for (i = 1; i<n; i++)//정렬할 범위를 확대해 나갑니다.
{
for (j = i; j>0; j--)
{
if (base[j - 1]>base[j])//앞쪽 원소가 더 크면
{
SWAP(base[j - 1], base[j]);//교환
ViewArr(base, n);//상태 출력
}
else
{
break;
}
}
}
}
void ViewArr(int *arr, int n)
{
int i = 0;
for (i = 0; i<n; i++)
{
printf("%2d ", arr[i]);
}
printf("\n");
}
자세히 보기
'언어 자료구조 알고리즘 > C언어 예제' 카테고리의 다른 글
[C언어] 순차 정렬, 버블 정렬, 선택 정렬, 삽입 정열, 쉘 정렬, 퀵 정렬, 병합 정렬, 힙 정렬) (0) | 2016.04.16 |
---|---|
[C언어 소스] 힙 정렬(Heap Sort) 알고리즘 (1) | 2016.04.11 |
[C언어 소스] 병합 정렬(Merge Sort, 합병 정렬) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 퀵 정렬 (Quick Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 쉘 정렬(Shell Sort) 알고리즘 (1) | 2016.04.11 |
[C언어 소스] 선택 정렬(Selection Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 버블 정렬 (Bubble Sort) 알고리즘 (0) | 2016.04.11 |
[C언어 소스] 순차 정렬(Sequential Sort) 알고리즘 (0) | 2016.04.11 |
이진 탐색 트리 운행, C언어 소스 (0) | 2016.04.04 |
이중 연결리스트 - 정렬 상태로 보관, C언어 소스 (0) | 2016.04.04 |