/* 이진검색 구현 및 예제 코드 */
#include <stdio.h>
int bsearch(int *arr, int what, int first, int last)
{
int mid;
if ((last - first) < 2)
return arr[first] == what || arr[last] == what;
mid = first + (last - first) / 2;
if (arr[mid] == what)
return 1;
if (arr[mid] > what)
return bsearch(arr, what, first, mid - 1);
return bsearch(arr, what, mid + 1, last);
}
/* 정수형 배열에서 정수를 검색하는 함수 */
int search(int *arr, int size, int what)
{
return bsearch(arr, what, 0, size - 1);
}
/* Testing Code */
void main()
{
int i;
int a[100];
for (i = 0; i < 100; i++) // 정수 배열 초기화 (0~99)
a[i] = i;
printf("%s!\n", search(a, 100, 99) ? "찾음" : "실패"); /* 찾음! */
printf("%s!\n", search(a, 100, -1) ? "찾음" : "실패"); /* 실패! */
printf("%s!\n", search(a, 100, 0) ? "찾음" : "실패"); /* 찾음! */
}
'C' 카테고리의 다른 글
C 언어 2바이트 크기 10진수, 8진수, 16진수 정수형 숫자를 2진수로 변환하여 출력하기 (0) | 2017.02.08 |
---|---|
C 언어에서 키 입력만 체크하기, _kbhit() (0) | 2017.02.08 |
세 정수 중에서 가장 큰 수 구하기 (C/C++) (0) | 2016.12.16 |
짝수 홀수 구분하는 다양한 방법 (C / C++) (0) | 2016.12.16 |
비주얼 C/C++ API 프로그래밍: 싸인 곡선 출력 예제 (0) | 2016.12.14 |