본문 바로가기

언어/C

삽입 정렬(insertion sort)

삽입 정렬(insertion sort)은 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.

즉, 매 순서다 해당 원소를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다.

 

삽입 정렬은 두 번째 자료부터 시작하여 그 앞의 자료들과 비교하여 십입할 위치를 지정한 후 자료를 뒤로 옮기고 지정한 자리에 자료를 삽입하여 정렬하는 알고리즘이다.

 

처음 key 값은 두 번째 요소부터 시작한다.

 

안정된 정렬 방법이며, 레코드의 수가 적을 경우 알고리즘 자체가 매우 간단해서 다른 복잡한 정렬보다 유리할 수 있고, 대부분의 배열이 이미 정렬되어 있는 경우에 매우 효율적일 수 있다.

하지만 다른 정렬에 비해 배열들의 이동이 자주 일어나므로, 배열의 크기가 클 경우에 적합하지 않다.

 

#include <stdio.h>
#define SIZE 5

void insertion_sort(int arr[],int n);

int main()
{
	int arr[SIZE]={8,5,6,2,4};
	
	insertion_sort(arr,SIZE);

	for(int i=0;i<SIZE;i++)
		printf("%d ",arr[i]);
	printf("\n");
}

void insertion_sort(int arr[],int n)
{
	int i, j, key;
	
	for(i=1;i<n;i++){
		key=arr[i];

		for(j=i-1 ; j>=0 && arr[j]>key ;j--)
			arr[j+1]=arr[j];

		arr[j+1]=key;
	}
}

 

'언어 > C' 카테고리의 다른 글

offsetof macro 와 container_of macro  (0) 2019.04.06
선택 정렬(selection sort)  (0) 2019.04.06
버블 정렬(bubble sort)  (0) 2019.04.06
C/C++의 const(상수)  (0) 2019.04.01