Page 118 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 118

p = bsearch(&ky,                                 /* 검색값에 대한 포인터 */
                     37     p = bsearch(&ky,                                /* 검색값에 대한 포인터 */
                                       x,                                      /* 배열 */
                     38             x,                                      /* 배열 */
                     39             nx,                                     /* 요소의 개수 */
                                       nx,                                     /* 요소의 개수 */
                     40             sizeof(int),                              /* 요소의 크기 */
                                       sizeof(int),                              /* 요소의 크기 */
                                      (int(*)(const void *, const void *)) int_cmp    /* 비교 함수 */
                     41            (int(*)(const void *, const void *)) int_cmp    /* 비교 함수 */
                                      );
                     42             );
                     43     if(p == NULL)
                     44       puts("검색에 실패했습니다.");
                     45     else
                     46       printf("%d은(는) x[%d]에 있습니다.\n", ky, (int)(p - x));
                     47     free(x);     /* 배열을 해제 */
                     48
                     49     return 0;
                     50  }



                   비교 함수

                   이번에는 앞에서 가장 복잡하다고 말했던 함수의 포인터형인 다섯 번째 인수에 대해 살펴보
                   겠습니다(보충수업 3-3에서 조금 더 자세히 설명합니다). 이진 검색의 검색 과정에는 검색하는 키

                   값과 배열의 요솟값을 비교하여 대소 관계를 판단하는 과정이 포함됩니다. 그런데 대소 관계
                   를 판단하는 방법은 요소의 자료형마다 다릅니다. 요소의 자료형은 정수일 수도 있고 문자열
                   이나 구조체일 수도 있습니다. 그러므로 두 값을 비교하고 난 다음의 어떤 값을 반환하는 비
                   교 함수는 사용자가 직접 작성해야 합니다. 따라서 bsearch 함수는 다섯 번째 매개변수로 이

                   비교 함수에 대한 포인터를 전달하는 방식을 취하고 있습니다. 다음은 실습 3-5에서 구현한
                   bsearch 함수의 반환값에 대한 설명입니다.


                     1. 첫 번째 인수가 가리키는 값이 더 작으면 음수 값을 반환합니다.
                     2. 첫 번째 인수가 가리키는 값과 두 번째 인수가 가리키는 값이 같으면 0을 반환합니다.
                     3. 첫 번째 인수가 가리키는 값이 더 크면 양수 값을 반환합니다.



                   그림 3-8은 두 인수 이름을 각각 a, b라고 할 때 비교 함수가 반환하는 값을 그림으로 설명한 것
                   입니다.












                   118   C 알고리즘
   113   114   115   116   117   118   119   120   121   122   123