Wyszukiwanie binarne¶
Opis problemu¶
Istnienie elementu¶
Implementacja¶
Opis implementacji¶
Funkcja binarySearch
przyjmuje cztery argumenty: lst
(lista, w której szukamy), num
(liczba, której szukamy), left
(indeks początkowy przeszukiwania) i right
(indeks końcowy przeszukiwania). Podstawą funkcji jest podejście rekurencyjne, dzielące problem na mniejsze części.
- Najpierw sprawdzamy, czy indeks początkowy jest większy niż końcowy. Jeśli tak, oznacza to, że liczba nie została znaleziona, więc funkcja zwraca
False
. - Następnie obliczamy środkowy indeks listy (
mid
). Jeśli element w środku listy jest równy szukanej liczbie (num
), funkcja zwracaTrue
. - Jeśli element środkowy jest mniejszy niż
num
, funkcja ponownie wywołuje siebie, ale tym razem z przesuniętym indeksem początkowym na pozycję za środkowym indeksem (mid + 1
). - W przeciwnym razie, jeśli element środkowy jest większy niż
num
, funkcja ponownie wywołuje się z indeksem końcowym ustawionym na jeden przed środkowym (mid - 1
).
W części main
, definiujemy uporządkowaną listę lst
i liczbę num
, którą chcemy znaleźć. Wywołujemy funkcję binarySearch
z tymi wartościami oraz z początkowym i końcowym indeksem listy. Wynik wyszukiwania (result
) określa, czy liczba znajduje się w liście, czy nie. W zależności od wyniku, program wyświetla odpowiedni komunikat.
Pozycja elementu¶
Implementacja¶
Opis implementacji¶
Funkcja binarySearch
przyjmuje cztery argumenty: listę lst
, szukaną liczbę num
, oraz indeksy left
i right
, które określają zakres przeszukiwania w liście.
- Warunek końca: jeśli
left
jest większe niżright
, oznacza to, że przeszukiwany zakres został wyczerpany, a liczba nie została znaleziona. W takim przypadku, funkcja zwraca-1
. - Znalezienie liczby: obliczamy środkowy indeks (
mid
) listy. Jeśli element w środku jest równy szukanej liczbie (num
), funkcja zwraca ten indeks. - Przeszukiwanie prawej części: jeżeli element środkowy jest mniejszy niż
num
, funkcja kontynuuje wyszukiwanie w prawej części listy, aktualizując indeksleft
namid + 1
. - Przeszukiwanie lewej części: w przeciwnym razie, jeśli element środkowy jest większy niż
num
, wyszukiwanie jest kontynuowane w lewej części, aktualizując indeksright
namid - 1
.
W części main
programu, definiujemy posortowaną listę lst
i liczbę num
, której indeks chcemy znaleźć. Następnie wywołujemy funkcję binarySearch
z odpowiednimi parametrami. Wynik, jaki otrzymujemy, to indeks szukanej liczby w liście.
- Jeśli wynik to
-1
, oznacza to, że liczba nie znajduje się w liście, co jest sygnalizowane odpowiednim komunikatem. - W przeciwnym wypadku, program wyświetla indeks, pod którym znajduje się szukana liczba.