Не работает алгоритм бинарного поиска в си
Недавно стал изучать программирование,не могу определить ошибку.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <locale.h>
using namespace std;
int binary_search(int arr[],int value)
{
int first = 0;
int last = (sizeof arr / sizeof arr[0])-1;
while(first<=last)
{
int average = first+last;
int needful = arr[average];
if (needful== value) return average;
if (needful > value) last= average - 1;
else
first = average + 1;
}
return 0;
}
Ответы (1 шт):
Обычная стандартная ошибка новичка...
int binary_search(int arr[],int value)
{
int first = 0;
int last = (sizeof arr / sizeof arr[0])-1;
Вы передаете массив, при передаче в функцию поступает указатель на первый элемент массива, так что sizeof(arr) возвращает размер указателя — 4 или 8 байт в зависимости от разрядности. так что last у вас либо 0, либо 1.
Вы бы сами легко поняли хотя бы где копать, если бы использовали отладчик или простой отладочный вывод. Например, записав
int binary_search(int arr[],int value)
{
int first = 0;
int last = (sizeof arr / sizeof arr[0])-1;
cout << "last = " << last << endl;
просто чтобы убедиться, что считается то, что нужно. Удалить потом все эти отладочные выводы — минутное дело. Учитесь отладке, написание кода — это процентов 20 времени, а вот отладка...
Да, ещё — как вы планируете различать два случая, когда искомое значение не найдено, и когда это первый же элемент массива? в обоих случаях вы выводите 0...