카테고리 없음
[C언어] 삽입정렬 알고리즘(insertion sort)
s뽈록이s
2013. 7. 17. 16:32
void InsertionSort(char *ar) { int i, j; char temp; int num = strlen(ar); for(i = 1; i < num; i++) { for(temp = ar[i], j = i; j > 0; j--) { if(ar[j - 1] > temp) ar[j] = ar[j - 1]; else break; } ar[j] = temp; } } void main() { char str[] = "complete"; printf("정렬 전의 문자열 : %s\n", str); InsertionSort(str); printf("정렬된 문자열 : %s\n", str); }
프로그램 실행화면
삽입 정렬은 배열의 앞쪽부터 순회하면서 정렬해 오는데 앞쪽의 정렬된 부분에서 대상 레코드의 위치를 찾아서 삽입하는 알고리즘이다.
자기보다 더 큰 값을 계속 뒤로 보내면서 빈 칸 하나를 만든 후 자신보다 작거나 같은 값을 만날 때 그 오른쪽 위치에 삽입한다.
위 프로그램은 "complete"라는 문자열을 삽입 정렬 알고리즘으로 정렬하여 "ceelmopt" 문자열을 만든다.i 루프로 배열 끝까지 순회하되 두 번째 요소부터 시작한다.
왜냐하면 앞쪽의 한 문자만 보면 이 부분 문자열은 이미 정렬되어 있다고 볼 수 있기 때문이다.
j 루프는 ar[i] 문자(temp)와 바로 왼쪽의 문자를 비교하여 왼쪽이 더 클 경우 이 값을 오른쪽으로 한 칸 이동시킨다.
자기보다 더 큰 값을 계속 이동시키다가 크지 않은 값을 만나면 이 값 다음 자리에 ar[i]를 삽입한다.