알고리즘/정렬

삽입 정렬

Dero Lee 2021. 12. 24. 23:50
728x90

 

삽입 정렬: 각 숫자를 적절한 위치에 삽입하는 정렬 알고리즘.

 

반복적으로 새로운 원소를 이미 정렬된 데이터에 필요할 때만 그 위치를 정해주어 그 곳으로 넣어주는 것이 핵심이다.

 

Ex)

     1 10 5 8 7 6 4 3 2 9

     1 5 10 8 7 6 4 3 2 9

     1 5 8 10 7 6 4 3 2 9

     1 5 7 8 10 6 4 3 2 9

     ~

     1 2 3 4 5 6 7 8 9 10

 

 

시간복잡도 : O(N^2)

삽입 정렬은 앞에 정렬되어 있는 것을 알고있는 상황을 가정하므로 적절한 위치에 삽입만 하기때문에 O(N^2) 정렬 알고리즘 중에서는 효율적인 편임. (거의 정렬된 상태라면 모든 정렬 알고리즘에서도 굉장히 효율적.)

 

Ex) 2 3 4 5 6 7 8 9 10 1

(이미 정렬되어 있으므로 한번씩만 비교하고 마지막 원소 1만 맨 앞으로 삽입되는 연산들을 수행함.)

 

#include <stdio.h>

int main()
{
	int i, j, temp;
	int array[10] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9};
	for(i=0; i<9; i++)
	{
		j=i;
		while(array[j] > array[j+1]) 
		{ // 특정 위치에서 하나씩 감소하며 적절한 위치에 삽입.
		  // 왼쪽에 있는 값보다 더 크거나 같다면 멈춤. (정렬이 되어있다고 가정하므로) 
			temp = array[j];
			array[j] = array[j+1];
			array[j+1]=temp;
			j--;
		} 
	}    
	for(i=0; i<10; i++)
	{
		printf("%d ",array[i]);
	}
	return 0;
}

 

728x90