ここは私のバイナリサーチコードです。私がしたいのは、(リストにない)何かを「リストに入っていない」ことを示すときに入れることです。しかし、それはうまく動作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;
}
あなたは「それがうまく機能するのdidnt」とはどういう意味ですかソートされているのでそれが大きい半分または再帰的条件に基づいて、より少ない半分を検索します
のようになります?なぜ、どのような場合に失敗するのか調べようとしましたか? – babon
'case -1:left = middle-1;' - > 'case -1:left = middle + 1;' – BLUEPIXY
このような単純なバグをデバッグするには、 –