2008/04/28 23:58

삽입정렬(Insertion Sort)

 삽입정렬(insertion sort) 알고리즘은 이미 정렬된 배열에 레코드를 삽입(insert)하여 정렬하는 알고리즘이다.
 

  처음 i-1배열슬롯(slot)의 키들이 정렬되어 있다고 가정한다. x를 i번째 슬롯에 있는 키 값이라 하자. x와 (i-1)번째 슬롯에 있는 키, (i-2)번째 슬롯에 있는 키, …, 등등 차례로 비교하되, x보다 작은 키를 찾을 때까지 이를 계쏙한다. j를 그 키가 위치한 슬롯이라고 하자. (j+1)번째 슬롯에서 (i-1)번째 슬롯에 있는 키들을 (j+2)번째 슬롯에서 i번째 슬롯으로 옮기고(move), (j+1)번째 슬롯에 x를 삽입한다. 이 과정을 i=2에서부터 i=n까지 반복한다. 다음 그림에서 이 정렬을 잘 설명해 준다.


사용자 삽입 이미지

  삽입정렬의 알고리즘은 다음과 같다.


알고리즘) 삽입정렬 ------------------------------------------------------------

 * 문제 : 비내림차순으로 n개 키를 정렬.
 * 입력 : 양의 정수 n; 키의 배열 S(인덱스는 1부터 n)
 * 출력 : 비내림차순으로 정렬된 키들로 구성된 배열 S

 

 void insertionsort ( int n, keytype S[])
 {
    index i, j;
    keytype x;

 

    for( i = 2; i <= n; i++)

    {
        x = S[i];
        j = i - 1;

   
        whlie(j > 0 && S[j] > x)

        {
            S[j + 1] = S[j];
            j--;
        }

        S[j + 1] = x;
    }
 }

---------------------------------------------------------------------------


참고 : Foundations of Algorithm, using C++ Pseudocode - 3rd Edition

Trackback 0 Comment 0