Dzień dobry.
Napisałem funkcję, przeszukującą binarnie i znajdującą ostatnią pozycję w tablicy, która odpowiada szukanej wartości. Jednak funkcja się zawiesza (dochodzi do momentu, kiedy
początek = 0; koniec = 1
(dla wartości szukanej 1, w tablicy [1, 2, 2, 4, 5]
Oto mój kod
int znajdzKoniec(int * predkosci, int wynik, int n)
{
int pocz = 0;
int kon = n - 1;
int sro = (kon + pocz) / 2;
while (pocz < kon)
{
//std::cout << pocz << " " << kon << std::endl;
if (predkosci[sro] > wynik)
kon = sro - 1;
else if (predkosci[sro] < wynik)
pocz = sro + 1;
else
pocz = sro;
sro = (kon + pocz) / 2;
}
if (predkosci[sro] == wynik)
return sro;
return -1;
}
Proszę o podpowiedź, lub wskazanie błędu
##Już znalazłem przyczynę. Trzeba dopisać +1
do linijki sro = (kon + pocz) / 2
##Poprawiona wygląda tak: sro = (kon + pocz + 1) / 2