본문 바로가기
2_ 바삭바삭 프로그래밍

C - 알고리즘 - 삽입정렬

by 준환이형님_ 2010. 5. 15.

코드가 길어 행을 줄였습니다. 이렇게 하면.. 예쁘지는 않지만~ (사랑스러워~)
삽입정렬은.. 마치 [왕자와 거지]게임 같아서 한번 내동댕이 쳐진 숫자는 밑바닥에서부터 자리를 찾아 쏙 넣어진답니다..(-_-?)

리스트를 이용한 삽입정렬은 링크를 참조하세요(http://topnanis.tistory.com/176)

그림을 보면-


#include <stdio.h>

#include <string.h>                                            //memmove함수사용


int main(void)

int temp=NULL;

int data_set[]={8,6,7,9,4,3,5,2,1,10};

for(int i=0; i<9; i++)

if(data_set[i-1]>data_set[i]) temp=data_set[i];  //정렬되지 않은 수를 temp에 태워 처음으로 보냄

else continue;


for(int j=0; j<i; j++)

{  

if(temp<data_set[j]) //자리를 찾았다면

{                                                               // 이사  될 자리- 예전자리 범위를 전체 우로 일보.

memmove(&data_set[j+1], &data_set[j], sizeof(data_set[0])*(i-j)); 

data_set[j]=temp;

break;

}

for(int i=0; i<10; i++) printf("%d ",data_set[i]);

return 0;

}



 

사로자바님의 말에 따르면 리소스의 사용은 [크기비교]가 아닌 [교환]에서 일어나는 것이랍니다. 교환횟수를 비교해 보았을때 삽입정렬은 뽀글정렬과 비교가 안될정도로 우수한 성능을 자랑하는군요 :D