Witam, jako zadanie mam zrobić program, który przeszukuje binarnie ciąg uporządkowanych elementów w poszukiwaniu jednego z nich.
Oto kod procedury, który napisałem i według mnie jest bez skazy ;) :
void szukanie(int ciag[], int liczba, int szukana)
{
int start=0;
int end=liczba; //liczba jest liczbą elementów w ciągu
int srodek;
do
{
srodek=(start+end)/2;
if (ciag[srodek]==szukana)
{
printf ("%d", srodek+1);
break;
getchar();
}
else
{
if(szukana<ciag[srodek])
{
start=0;
end=srodek-1;
}
else
{
start=srodek+1;
end=liczba;
}
}
if (start>end) printf("-1\n");
}
while (start<end);
}
Niestety program nie działa prawidłowo. Nie wiem czy wykorzystana przez mnie pętla do...while jest odpowiednia? Gdzie leży błąd?
Dodam, że zamiana while (start<end); --> while (start=<end); rozwiązuje problem dla ciągu (1,2,3) gdy szukam {1}. Niestety nie działa nadal dla przeszukiwania ciągu (1,2,3,4) w poszukiwaniu {2}.
Zamiast korzystać z gotowców, które na bank można znaleźć, wolałbym wskazanie błędu w moim kodzie/rozumowaniu.
Pozdrawiam
Bart