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

bsearch 함수(정렬된 배열에서 검색하는 함수)

                   C 언어의 표준 라이브러리는 다양한 요소의 자료형을 가진 배열에서도 검색 가능한 bsearch
                   함수를 제공합니다. 이 함수를 일반 유틸리티(utility) 함수라고 부릅니다. 다음에 bsearch 함
                   수의 특징과 요소를 표로 정리했습니다.

                      06장에서 살펴볼 정렬을 수행하는 qsort 함수도 유틸리티 함수입니다.



                     특징 1. 검색 대상의 배열은 항상 정렬되어 있어야 합니다.
                     특징 2. 검색하는 값과 같은 요소가 여러 개 존재하는 경우, 항상 가장 앞쪽에 있는 요소를 찾아내는 건 아닙니다.




                             bsearch 함수
                    헤더       #include <stdlib.h>
                             void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
                    형식
                                           int(*compar)(const void *, const void *));
                             맨 처음 요소를 base가 가리키는 요소의 개수가 nmemb개이고 요소 크기가 size인 객체의 배열에서 key
                             가 가리키는 객체와 일치하는 요소를 검색합니다.
                             compar가 가리키는 비교 함수는 key 객체에 대한 포인터를 첫 번째 인수로, 배열 요소에 대한 포인터
                    해설       를 두 번째 인수로 하여 호출합니다. compar가 가리키는 비교 함수는 key 객체가 배열 요소보다 작으면
                             작은 값을, 일치하면 0을, 크면 큰 값을 반환하도록 작성해야 합니다. compar가 가리키는 배열은 key
                             객체와 비교가 가능한 작은 요소, 같은 요소, 큰 요소의 세 부분으로 구성되어 있습니다. 이 세 부분이
                             소개한 순서로 존재해야 합니다.
                             검사하는 대상(배열) 중에 일치하는 요소에 대한 포인터를 반환합니다. 일치하는 요소가 없다면 NULL
                    반환값
                             포인터를 반환합니다. 두 요소의 값이 같을 때 어느 요소와 일치하는지는 규정되어 있지 않습니다.


                   실습 3-5는 bsearch 함수를 사용해 작성한 프로그램입니다. 오름차순으로 정렬된 배열 x의

                   요소에서 입력한 값 ky와 같은 요소를 찾습니다. 이때 bsearch 함수를 호출하는 곳이 실습 코
                   드의 초록색으로 표시한 부분입니다. 강력한 기능의 함수인 만큼 사용 방법도 어렵고 인수도
                   5개나 필요합니다.


                     1.   첫 번째 인수로 전달하는 매개변수는 키 값입니다(검색할 값이 저장된 객체에 대한 포인터). 이 프로그램에
                       서는 키 값이 변수 ky에 저장되어 있으므로 &ky를 전달합니다.
                     2.   두 번째 인수로 전달하는 매개변수는 배열의 포인터입니다. 이 프로그램에서는 검색 대상인 배열 x의 포인
                       터(x)를 전달합니다.
                     3. 세 번째 인수로 전달하는 매개변수는 배열의 요소 개수입니다. 이 프로그램에서는 nx입니다.
                     4.   네 번째 인수로 전달하는 매개변수는 배열의 요소 크기입니다. 이 프로그램에서는 검색 대상인 배열 x의 요
                       소의 자료형이 int형이므로 sizeof(int)를 전달합니다.
                     5. 가장 복잡한 것이 다섯 번째 인수입니다. 이 내용에 대해서는 바로 다음에 설명하겠습니다.




                   116   C 알고리즘
   111   112   113   114   115   116   117   118   119   120   121