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 알고리즘
   239   240   241   242   243   244   245   246   247   248   249