ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 삽입 정렬
    알고리즘/정렬 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

    '알고리즘 > 정렬' 카테고리의 다른 글

    힙 정렬  (0) 2021.12.25
    병합 정렬  (0) 2021.12.25
    퀵 정렬  (0) 2021.12.25
    버블 정렬  (0) 2021.12.24
    선택 정렬  (0) 2021.12.24

    댓글

Designed by Tistory.