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