bsearch
헤더 파일
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - stdlib.h
void *bsearch(const void *key, const void *base,size_t nmemb,
size_t size,int (*compare)const void *, const void *)); 이진 탐색
입력 매개 변수 리스트
key 검색할 키
base 정렬 상태의 메모리 주소
nmemb 원소 개수
compare 비교 논리
반환 값
검색할 키가 있는 메모리 주소, 없을 때 NULL
bsearch 함수는 정렬 상태의 배열에서 이진 탐색으로 빠른 검색 기능을 제공합니다.
마지막 인자는 두 개의 원소를 비교할 수 있는 알고리즘을 전달받습니다.
따라서 bsearch 함수를 사용하려면 비교하는 함수는 사용하는 곳에서 정의하여 전달해야 합니다.
비교하는 함수는 앞쪽이 클 때 양수, 같을 때 0, 뒤쪽이 클 때 음수를 반환하게 정의합니다.
사용 예
//C언어 표준 라이브러리 함수 사용법 가이드
//void* bsearch (const void* key, const void* base,size_t num, size_t size, int (*compare)(const void*,const void*)); 이진 탐색 함수
//정렬 상태의 배열에서 검색
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef int (*compare)(const void*,const void*); //비교 알고리즘의 함수 포인터 형식을 compare로 타입명 정의
int compare_int (const void * a, const void * b) //두 개의 정수를 비교하는 알고리즘(입력 인자로 정수가 있는 메모리 주소를 전달해야 함)
{
const int *p1 = (const int *)a;
const int *p2 = (const int *)b;
return *p1 -*p2;
}
int compare_str(const void *a,const void *b) //두 개의 문자열을 비교하는 알고리즘(입력 인자로 문자열 주소를 전달해야 함)
{
const char *p1 = (const char *)a;
const char *p2 = (const char *)b;
return strcmp(p1,p2);
}
typedef char strelem[20];//원소 형식이 char이고 크기가 20인 배열 형식을 strelem 으로 타입명 정의
int main (void)
{
int arr[10]= {1, 10 , 15, 20, 29, 30, 31, 33, 35, 50 };//정렬 상태
strelem arr2[5]= {"강감찬","김구","을지문덕","이순신","홍길동"};//정렬 상태
int *pos;
strelem *pos2;
int key =29;
pos = (int*)bsearch (&key, arr, 10, sizeof(int), compare_int);//이진 탐색
if(pos!=NULL)
{
printf ("%d is in the array %d index.\n",*pos, pos-arr);//탐색 키와 인덱스 출력
}
else
{
printf ("%d is not in the array.\n",key);
}
pos2 = (strelem *) bsearch ("이순신", arr2, 5, sizeof(strelem),compare_str);//이진 탐색
if(pos2!=NULL)
{
printf ("%s is in the array %d index.\n",pos2, pos2-arr2);//탐색 키와 인덱스 출력
}
else
{
printf ("%d is not in the array.\n","이순신");
}
return 0;
}
출력
29 is in the array 4 index.
이순신 is in the array 3 index.
사용한 함수
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
div 함수 [표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
---|---|
llabs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
labs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
abs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
qsort 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
system 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
getenv 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
exit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
atexit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
abort 함수[C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |