プログラミングの新機能。 Cでバイナリ検索を実装しようとしましたが、残念ながら正しく動作しません。値が配列内にあっても、私の関数は常にfalseを返します。プログラミングの初心者です。助けてください。値がソートされた配列に含まれている場合でも、Cのバイナリ検索は常にfalseを返します
関数は次の入力を受け取ります。 "value" - 配列にある整数値。 "values" - ソートされた配列。 "n" - 配列内の整数の数。
bool search(int value, int values[], int n)
{
// recursive implementation of binary search
if (n % 2 == 0)
{
search_even(value, values, n);
}
else
{
search_odd(value, values, n);
}
return false;
}
bool search_even(int value, int values[], int n)
{
// binary search
if (n <= 0)
{
return false;
}
// check middle of array
else if (value == values[n/2])
{
return true;
}
// search left half of sorted array
else if (value < values[n/2])
{
int less_than_arr[n/2];
for (int i = 0; i < n/2; i++)
{
less_than_arr[i] = values[i];
}
search(value, less_than_arr, n/2);
}
// search right half of sorted array
else if (value > values[n/2])
{
int more_than_arr[(n/2) - 1];
for (int i = 0; i < (n/2) - 1; i++)
{
more_than_arr[i] = values[i + 1 + n/2];
}
search(value, more_than_arr, n/2);
}
return false;
}
bool search_odd(int value, int values[], int n)
{
// binary search
if (n <= 0)
{
return false;
}
// check middle of array
else if (value == values[n/2])
{
return true;
}
// search left half of sorted array
else if (value < values[n/2])
{
int less_than_arr[n/2];
for (int i = 0; i < n/2; i++)
{
less_than_arr[i] = values[i];
}
search(value, less_than_arr, n/2);
}
// search right half of sorted array
else if (value > values[n/2])
{
int more_than_arr[n/2];
for (int i = 0; i < n/2; i++)
{
more_than_arr[i] = values[i + 1 + n/2];
}
search(value, more_than_arr, n/2);
}
return false;
}
あなたは、偶数と奇数列の長さのための2つの別々の機能を必要としません。あなたのコードでは、 'n/2'は結果が有効な整数であることを保証する整数除算です。 –
サブ配列をローカル配列にコピーする必要はありません。入力配列を使用するだけです。あなたは読んでいるだけで、それを変更していません。 –