Funkcja przeszukująca binarnie (iteracyjnie)

0

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

0
int sro = (kon + pocz) / 2; 

Wiesz, że to głupie? Dzielenie wartości całkowitych, daje wartość całkowitą, czyli
wynikiem zawsze będzie liczba z obciętą wartością po przecinku.

0

Nadal masz błąd w kodzie. Linijka

int sro = (kon + pocz) / 2;

powinna być na początku pętli. Wtedy wartość kon i pocz będą miały jeszcze nie zmodyfikowaną wartość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1