2017-09-19 6 views
0

ここは私のバイナリサーチコードです。私がしたいのは、(リストにない)何かを「リストに入っていない」ことを示すときに入れることです。しかし、それはうまく動作didntの私はbinarysearch c code error

int compare(int, int); 

int binsearch(int list[], int searchnum, int left, int right); 

int main() { 


    int right, left, middle; 
    int list[MAX_NUM] = { 1,3,5,7,9,11,13,15,17,19}; 

    int searchnum,count=0; 
    int answer; 
    right = MAX_NUM-1; 
    left = 0; 
    printf("n : "); 
    scanf_s("%d", &searchnum); 

    answer=binsearch(list, searchnum, left, right); 

    if (answer == -1) 
     printf("%d is not in list", searchnum); 
    else  
     printf("%d", answer); 

    system("pause"); 
    return 0; 
} 


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 = middle - 1; 
      break; 
     case 0: return middle; 
     case 1: right = middle - 1; 

     } 
    } 
    return -1; 
} 
+1

あなたは「それがうまく機能するのdidnt」とはどういう意味ですかソートされているのでそれが大きい半分または再帰的条件に基づいて、より少ない半分を検索します

middle = (left + right)/2 if middle < searchnum left = middle + 1 else if middle > searchnum right = middle - 1 else return 0 

のようになります?なぜ、どのような場合に失敗するのか調べようとしましたか? – babon

+0

'case -1:left = middle-1;' - > 'case -1:left = middle + 1;' – BLUEPIXY

+0

このような単純なバグをデバッグするには、 –

答えて

0

あなたはcase -1: left = middle + 1;case -1: left = middle - 1;を変更する必要があり、なぜ知りません。
あなたのように、中央値よりも大きな数字は見つかりませんでした。

+1

ニースキャッチ!!バディ – Gaurav

+0

あなたは私のコメントが好きではありません! – Gaurav