Page 244 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 244
실습 6-11에서는 오름차순으로 정렬했습니다. 만 /*--- int형 비교 함수(내림차순 정렬 사용) ---*/
int int_cmpr(const int *a, const int *b)
약 오름차순이 아닌 내림차순으로 정렬하려면
{
qsort에 전달하는 비교 함수는 오른쪽과 같이 작성 if(*a < *b)
return 1;
해야 합니다. else if(*a > *b)
return -1;
오름차순으로 작성한 비교 함수와의 차이점은 초 else
return 0;
록색 박스로 표시한 부분입니다. 즉, 비교 함수 int_ }
cmpr의 반환값을 int_cmp 함수와 반대로 작성하
면 됩니다.
실습 6-12는 구조체 배열을 정렬하는 프로그램입니다. 정렬하려는 데이터는 name(이름),
height(키), weight(몸무게)의 멤버로 구성된 구조체 Person의 배열 x입니다.
이 프로그램은 배열 x를 이름, 키, 몸무게를 기준으로 3회 정렬합니다. 각 정렬에 사용하는 비
교 함수는 아래와 같습니다.
실습 6-12 •완성 파일 chap06 / qsort2.c
01 /* qsort 함수를 사용하여 구조체 배열을 정렬 */
실행 결과
02 #include <stdio.h>
정렬 전
03 #include <stdlib.h>
sunmi 170cm 52kg
04 #include <string.h> yoobin 180cm 70kg
05 sohee 172cm 63kg
06 typedef struct { jina 165cm 50kg
07 char name[10]; /* 이름 */
이름 오름차순으로 정렬 후
08 int height; /* 키 */
jina 165cm 50kg
09 int weight; /* 몸무게 */
sohee 172cm 63kg
10 } Person; sunmi 170cm 52kg
11 yoobin 180cm 70kg
12 /*--- Person형 비교 함수(이름 오름차순 정렬) ---*/
13 int npcmp (const Person *x, const Person *y) 키 오름차순으로 정렬 후
jina 165cm 50kg
14 { 1
sunmi 170cm 52kg
15 return strcmp(x->name, y->name);
sohee 172cm 63kg
16 } yoobin 180cm 70kg
17
18 /*--- Person형 비교 함수(키 오름차순 정렬) ---*/ 몸무게 내림차순으로 정렬 후
19 int hpcmp (const Person *x, const Person *y) yoobin 180cm 70kg
sohee 172cm 63kg
20 { sunmi 170cm 52kg
21 return x->height < y->height ? -1 : 2
jina 165cm 50kg
22 x->height > y->height ? 1 : 0;
23 }
244 C 알고리즘