#title 삽입정렬
[[TableOfContents]]

==== 기본구현 ====
{{{
#include <stdio.h>
#include <stdlib.h>

void insert_sort(int*, int);

int main(int argc, char *argv[])
{
    int i;
    int A[10] = {7,3,4,1,8,9,0,5,2,6};
    
    insert_sort(A, sizeof(A)/4);  
    
    for(i = 0; i < sizeof(A)/4; i++)
    {
        printf("A[%d] = %d\n", i, A[i]);
    }
    
    system("PAUSE");	
    return 0;
}

void insert_sort(int* data, int size)
{
    int i,j,temp;
   
    for(i = 1; i < size; i++)
    {
        for(j = i; j > 0; j--)
        {
            if (data[j] < data[j-1])
            {
                temp = data[j];
                data[j] = data[j-1];
                data[j-1] = temp;
            }
        }
    }
}
}}}
for루프가 2개니까 O^^2^^인 알고리즘이네요. 

==== 오름차순, 내림차순 ====
{{{
#include <stdio.h>
#include <stdlib.h>

int insert_sort(int*, int, char*);

int main(int argc, char *argv[])
{
    int i,size;
    int A[10] = {7,3,4,1,8,9,0,5,2,6};
    size = sizeof(A)/sizeof(int);
    
    //insert_sort(A, size, "asc");  
    //insert_sort(A, size, "desc"); 
    
    if (!insert_sort(A, size, "desc"))
    {
        for(i = 0; i < size; i++)
        {
            printf("A[%d] = %d\n", i, A[i]);
        }
    }
    system("PAUSE");	
    return 0;
}

int insert_sort(int* data, int size, char* order)
{
    int i,j,temp;
    
    if (size <= 1)
       return 0;
    if ("asc" == order)
    { 
        for(i = 1; i < size; i++)
        {
            for(j = i; j > 0; j--)
            {
    
                if (data[j] < data[j-1])
                {
                    temp = data[j];
                    data[j] = data[j-1];
                    data[j-1] = temp;
                }
            }
        }
    }
    else if ("desc" == order)
    {
        for(i = 1; i < size; i++)
        {
            for(j = i; j > 0; j--)
            {
    
                if (data[j] > data[j-1])
                {
                    temp = data[j];
                    data[j] = data[j-1];
                    data[j-1] = temp;
                }
            }
        }
    }
    else
        return 1;
        
    return 0;
}
}}}

오름차순, 내림차순하느라고 if가 들어갔습니다. 연산자를 "<"에서 ">"로만 바꾸면 되는데 말이죠. 좋은 방법없나? 쩝..