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

형으로 표현할 수 있는 값을 초과할 수 있기 때문입니다(오버플로의 위험이 있습니다). 예를 들어, int형의
                        표현 범위가 ‘–32,768 ~ 32,767’이라고 하면 ‘–30,000 – 10,000’, ‘–20,000 – 20,000’ 등의 뺄셈은

                        제대로 된 결과를 얻을 수 없습니다.






                        bsearch 함수의 반환값
                        bsearch 함수의 반환값은 검색을 통해 찾은 요소의 포인터입니다. 그림 3-9에서 볼 수 있듯
                        이 bsearch 함수의 반환값을 대입한 p는 찾은 요소를 가리킵니다. 따라서 그 요소의 인덱스
                        는 포인터 p에서 첫 번째 요소의 포인터 x를 뺀 식 p – x로 얻을 수 있습니다. 또한 bsearch 함

                        수는 검색에 실패한 경우 널(NULL) 포인터를 반환합니다.
                           일반적으로 포인터 a와 b가 같은 배열의 요소를 가리킨다면 b – a에 의해 두 요소의 인덱스 차이를 얻을 수 있습니다.


                            검색할 값을 저장한 객체에
                            대한 포인터
                                                 23
                                      검색 대상 배
                                      열의 첫 번째    8         요소의 개수
                                      요소에  대한
                                      포인터
                                                 15
                             p - x               18     sizeof(int)    요소의 크기
                                                 18
                                                 23
                                                 39
                                                                  /*--- 정수를 비교하는 함수(오름차순) ---*/
                                                 57               int int_cmp(const int *a, const int *b)
                                                 68               {
                                                                    if (*a < *b)
                        찾아낸 요소에                  72                   return -1;
                         대한 포인터                                     else if (*a > *b)
                                                                      return 1;
                                                                    else
                                                                      return 0;
                                                                  }
                                                                          비교 함수에 대한 포인터


                           p = bsearch(&ky, x, nx, sizeof(int),
                                                               (int (*)(const void *, const void *))int_cmp);

                                                [그림 3-9] bsearch 함수를 사용한 검색


                        그러면 오름차순으로 정렬된 배열이 아닌 내림차순으로 정렬된 배열에서 검색을 수행해 보
                        겠습니다.






                                                                                          03•검색  121
   116   117   118   119   120   121   122   123   124   125   126