#include <stdio.h>
// 함수 원형 선언
int compare(int x, int y);
int binsearch(int list[], int searchNum, int left, int right);
// compare(x,y) (x<y?-1: x==y?:0:1)
// 삼항 조건연산자: 조건식 ? 참일_때_값 : 거짓일_때_값
// 중첩 삼항연산자: 조건식1 ? 참1 : (조건식2 ? 참2 : 거짓)
int compare(int x, int y)
{
if(x<y) return -1;
else if (x==y) return 0;
else return 1;
}
// 이진탐색 반복함수로 구현
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: left=left+1; break; // list[middle] < searchNum
case 0: return middle; //반환값이 0 이상이면 발견한 배열 인덱스
case 1: right=right-1; // list[middle] > searchNum
}
}
return -1;
}
// 이진탐색 재귀호출로 구현
int binsearch_recall(int list[], int searchNum, int left, int right)
{
int middle;
if(left<=right){
middle = (left+right)/2;
switch(compare(list[middle], searchNum)){
case -1: return // list[middle] < searchNum
binsearch_recall(list, searchNum, middle+1, right);
case 0: return middle;
case 1: return // list[middle] > searchNum
binsearch_recall(list, searchNum, left, middle-1);
}
return -1;
}
}
int main() {
// int result = compare(2,5);
// printf("return = %d\n", result);
int s_bin [] = {1,2,3,4,5,6,7,8,9,10};
int bin_result = binsearch(s_bin, 3, 0, 9);
printf("반복함수 찾은 위치: s_bin[%d]\n", bin_result);
printf("반복함수 찾은 값: %d\n", s_bin[bin_result]);
int bin_result2 = binsearch_recall(s_bin, 3, 0, 9);
printf("재귀함수 찾은 위치: s_bin[%d]\n", bin_result2);
printf("재귀함수 찾은 값: %d", s_bin[bin_result2]);
return 0;
}
//
To embed this project on your website, copy the following code and paste it into your website's HTML: