2008년 4월 19일 토요일

[알고리즘]삽입정렬

우선 알고리즘의 기초라고 할 수 있는 삽입정렬

insertSort(int array[], int arrayNum)

{

int temp;

for(int i = 1; i <>

{

temp = i;

while(array[temp] <>= 0)

{

array[temp] += array[temp-1];

array[temp-1] = array[temp] - array[temp-1];

array[temp] = array[temp] - array[temp-1];

--temp;

}

}

}


이건 슈도코드가 아니라 c++ 코드로 만든 것으로

돌아가는지는 확인해봤음


알고리즘에 관한 간단한 설명이라면

우선 while문 부터 설명하면

정렬할 숫자(array[i])의 앞부분은 정렬이 되어있다는 가정하에

바로 앞의 숫자와 비교해봐서 자신이 작다면 교환한뒤

다시 앞의 숫자와 비교하는 것을

맨 앞까지 가거나 앞의 숫자가 자신보다 작거나 같다면

끝나는 구조로 되어있다.

for문이 1부터 시작하는 것은 1개의 값은

항상 정렬되어있기 때문이다.


나의 특유의 이해하기 힘든 설명으로

위의 글은 거의 알아먹기 힘들테니 예를 들어보면,

입력이 10, 4, 5, 2, 8 이라면

우선 i = 1이니 4부터 시작

10* 4 5 2 8 // 시작부분

4 10* 5 2 8 // i = 1

4 5 10* 2 8 // i = 2

4 5 2 10 8 // i = 3

4 2 5 10 8 // i = 3

2 4 5 10* 8 // i = 3

2 4 5 8 10* // i = 4 끝


위에서 별표를 한 곳 앞쪽은 정렬이 되어있다.

바로 뒤의 것을 정렬이 되어있는 부분에 '삽입' 하기때문에

삽입정렬이라고 하는 것이다.


어쨋든 설명을 잘 하지는 않았지만 나로서는 이것이 한계로

더 이상의 설명은 관두기로..

댓글 없음: