Page 246 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 246
64 /* 몸무게 내림차순으로 정렬 */
65 qsort(x, nx, sizeof(Person),(int(*)(const void *, const void *)) wpcmp);
66 puts("\n몸무게 내림차순으로 정렬 후");
67 print_person(x, nx);
68
69 return 0;
70 }
이 프로그램은 배열 x를 이름, 키, 몸무게를 기준으로 3회 정렬합니다. 각 정렬에 사용하는 비
교 함수는 아래와 같습니다.
1 이름 오름차순 정렬용 비교 함수 … npcmp 함수
2 키 오름차순 정렬용 비교 함수 … hpcmp 함수
3 몸무게 내림차순 정렬용 비교 함수 … wpcmp 함수
이름의 비교 함수는 strcmp 함수의 반환값을 그대로 반환합니다. strcmp 함수는 문자열을 비교하는 함수로, 이 함수에
대한 내용은 08장에서 살펴봅니다.
qsort 함수는 같은 키 값을 가지고 있는 데이터가 2개 이상인 경우에 이름의 오름차순으로 정
렬이 되기는 하지만 정렬 전후의 데이터가 같은 순서를 유지하지는 않습니다(안정된 정렬은 아
닙니다).
연습 Q19 qsort 함수를 사용하여 아래 두 배열을 오름차순으로 정렬하는 프로그램을 작성하세요.
문제 프로그램에서 정렬하는 부분의 코드는 각각 독립적인 함수로 구현하세요.
char a[][7] = {"LISP", "C", "Ada", "Pascal"};
char *p[] = {"LISP", "C", "Ada", "Pascal"};
Q20 퀵 정렬 알고리즘을 사용하여 qsort 함수와 같은 형식으로 호출할 수 있는 아래의 함수를
직접 작성하세요.
void q_sort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
246 C 알고리즘