Programing/C- programing

bsearch() 이진탐색 표준 라이브러리

sosal 2010. 8. 23. 19:34
반응형

/*
 http://sosal.tistory.com/
 * made by so_Sal
 */

binary search는 이미 C Library에서 구현해있습니다.
따라서 우리는 이진탐색이 필요할 때, 구현하지 않고
라이브러리에서 함수를 가져다 사용하면 됩니다.

#include <stdlib.h>
void *bsearch(const void *key,   <-- 찾고자 하는 값 주소
                     const void *base, <-- 정렬된 데이터 배열의 주소
                     size_t nmemb,     <-- 데이터 요소의 개수
                     size_t size,          <-- 한 데이터 자료형의 크기
                     int (*compar)(const void *, const void *)); <-- 비교 함수 포인터



예제

#include<iostream>
#include<cstring>
#include<time.h>
#include<stdlib.h>
using namespace std;

int compare(const void* elem1,const void* elem2){
    return *(int*)elem1 - *(int*)elem2;
}

int main(){
   
    srand(time(0));
    int a[30000];
    int j=0;
 
    for(int i=0;i<30000;i++,j+=2)
        a[i] = j;

    const int target=59880;
   
    int result = (int)bsearch(&target,a,30000,sizeof(int),compare);

    if(result)
        cout<<"존재합니다."<<endl;
    else
        cout<<"존재하지 않습니다."<<endl;
   
}