私はわずか3つの引数を使用して、少し非伝統的な方法でバイナリ検索を実装しようとしていますint value(私が探しているもの)、int values [](配列)、int n (配列のサイズ)。以下のコードは数字2を見つけ、13はそこにはないが、6や7のような数字を見つけることができないことを認識しています。問題は最後の再帰呼び出しにあると思います。それはポインタの問題かもしれません。私はコードの残りの部分がうまく動作することは確かです。私が間違っているかもしれない場所についての考えは高く評価されます。バイナリ検索Segフォールト
#include <stdio.h>
#include <stdbool.h>
bool search(int value, int values[], int n);
int main(void)
{
int value = 6;
int values[] = {1, 2, 3, 4, 5, 6, 7};
int n = 7;
bool x = search(value, values, n);
if (x == true)
printf("found\n");
else
printf("not found\n");
}
bool search(int value, int values[], int n)
{
int midpoint = n/2;
if (n/2 <= 0)
{
return false;
}
if (value == values[midpoint])
{
return true;
}
if (value < values[midpoint])
{
return search(value, values, n/2);
}
else if (value > values[midpoint])
{
return search(value, values, n/2);
}
return false;
}
'values + n - n/2'(' values + n/2'と同じではありません)のようなものが必要です。 – user3386109
値は配列の名前なので、私が従うことに注意してください。数量n/2を追加することは理にかなっているようではありません。私は確かに一緒に周り遊ぶでしょう。返信ありがとう! – Ryan
'if(n/2 <= 0)'行が間違っています。 0は有効な配列インデックスです。そのため、配列スライスの先頭でコードが値を見つけることができないのです。 – tofro