반응형
저번 시간에 헀던 순차탐색과 비슷하지만 구조가 조금 다르다. 이번에는 재귀를 사용하여 이진탐색을 구현해보았다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COMPARE(A,B) ((A)>(B))?(1):(((A)<(B))?(-1):(0))
int binsearch(int list[ ], int searchnum, int left, int right) {
int middle;
while(left<=right)
{
middle = (left+right)/2;
switch (COMPARE(list[middle],searchnum)){
case -1: return binsearch(list,searchnum,(middle+1),right);
case 0: return middle;
case 1: return binsearch(list,searchnum,left,(middle-1));
}
}
return -1;
}
int prime[]={ ... };
int main()
{
int search_num;
int idx;
scanf("%d", &search_num);
idx = binsearch(prime,search_num,0,9999);
printf("%d\n", idx);
}
A[0] | A[1] | A[2] | A[3] | A[4] |
1 | 2 | 3 | 4 | 5 |
위에 배열처럼 1부터 5까지 A라는 배열이 있다고 가정해보자. 그럼 A[0]번쨰배열이 left가 될것이고 A[4]가 배열의 마지막인 right가 될것이다. 그러면 그중간인 A[2]가 middle이 되겠다. 중간값을 찾아가면서 범위를 줄여가며 원하는 숫자가 몇번째에 들어가있는지 찾아주는 것이다. case문을 통해 자기자신의 함수를 불러오는 로직을 가지고있다.
반응형
'혼자 공부하는 것들 > 자료구조(c언어)' 카테고리의 다른 글
C) 순차탐색(sequential search) 구현하기 (0) | 2020.07.18 |
---|---|
C)주어진 파일 문서에 포함된 각 단어별 빈도 수를 출력하는 프로그램 작성(이진트리 사용) (0) | 2020.07.18 |
C)원형 큐(queue)에 자료 삽입 및 삭제 (0) | 2020.07.18 |
C)전위(preorder), 중위(inorder), 후위(postorder)순회 트리 구현 (0) | 2020.07.18 |
C)복소수를 구조체로 표현해보기, 복소수 덧셈 계산 (0) | 2020.07.17 |
댓글