#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;
}
// 

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: